Próbuję utworzyć klasę z leniwymi obliczeniami. Tak więc potrzebuję struct do przechowywania wcześniej obliczonych zmiennych i chcę umieścić tę klasę w nienazwanej przestrzeni nazw (nie chcę zanieczyszczać globalnego zasięgu). Oto minimalne kod, który wyjaśnia, co chcę: calculator.h
:Jak przesłać dalej deklaruj klasę, która znajduje się w nienazwanej przestrzeni nazw
#ifndef CALCULATOR_H
#define CALCULATOR_H
class PrevCalc;
class Calculator
{
public:
Calculator();
PrevCalc* prevCalc;
};
#endif // CALCULATOR_H
calculator.cpp
:
#include "calculator.h"
namespace{
struct PrevCalc{
double prevA = -1;
double prevB = -1;
double prevC = -1;
};
}
Calculator::Calculator()
{
prevCalc = new PrevCalc();
}
Oczywiście daje błąd expected type-specifier before 'PrevCalc'
i gdybym określić PrevCalc
bez nazw wszystko działa poprawnie. Moje pytanie brzmi: w jaki sposób zadeklarować klasy, które będą zdefiniowane w przestrzeni nazw bezimiennego w .cpp
pliku
anonimowy nazw w nagłówku jest z pewnością zły projekt. –
Anonimowe przestrzenie nazw są ** przeznaczone **, aby ograniczyć zakres do zakresu pliku. Nazwana przestrzeń nazw może lepiej pasować do twoich potrzeb. – Downvoter
Dlaczego nie uczynić 'PrevCalc' zagnieżdżoną strukturą' Kalkulatora'? Nie trzeba wtedy dynamicznie przydzielać go. –