W C++ wszystko, co chcę zrobić, to zadeklarować klasę DisplayInfo
w pliku DisplayInfo
w pliku .h
, a następnie w pliku .cpp
, nie trzeba wpisywać pierwszej DisplayInfo::DisplayInfo()
i każdej definicji funkcji.Czy mogę uniknąć używania nazwy klasy w pliku .cpp, jeśli zadeklaruję obszar nazw w nagłówku?
Niestety, obejrzałem ponad 20 tematów i moją książkę C++ już ponad dwie godziny i nie mogłem tego rozwiązać. Myślę, że to dlatego, że próbuję użyć mojego 10-letniego szkolenia java w C++.
1-ty trial:
//DisplayInfo.h
namespace DisplayInfoNamespace
{
Class DisplayInfo
{
public:
DisplayInfo(); //default constructor
float getWidth();
float getHeight();
...
};
}
//DisplayInfo.cpp
using namespace DisplayInfoNamespace; //doesn't work
using namespace DisplayInfoNamespace::DisplayInfo //doesn't work either
using DisplayInfoNamespace::DisplayInfo //doesn't work
{
DisplayInfo::DisplayInfo() {}; //works when I remove the namespace, but the first DisplayInfo:: is what I don't want to type
DisplayInfo::getWidth() {return DisplayInfo::width;} //more DisplayInfo:: that I don't want to type
...
}
Na drugim badaniu, starałem przełączania kolejności, więc było
class DisplayInfo
{
namespace DisplayInfoNamespace
{
...
}
}
iw pliku .cpp
, wypróbowaniu wszystkich powyższych Plus
using namespace DisplayInfo::DisplayInfoNamespace;
Dla trzeciej próby próbowałem przekazania dalej, deklarując ją z następującym nagłówkiem:
namespace DisplayInfoNamespace
{
class DisplayInfo;
}
class DisplayInfo
{
public:
...all my methods and constructors...
};
Używam VisualStudio2010 wyrażania i mimo starannie czytać komunikaty o błędach nie udało się znaleźć odpowiedni układ klas i przestrzenie nazw w pliku nagłówka i .cpp, aby to wyszło.
A teraz po tym, jak spędziłem 30 minut, wpisując to, czy odpowiedź brzmi: C++: "Class namespaces"?? (aka nie, musisz użyć typedefs?)
Dzięki, ale wydaje się to tak dziwne, że nie można tego obejść. Czy mam zdefiniować klasę w pliku .cpp czy coś takiego? – user2247872
nie, ale jeśli nie, musisz określić skąd pochodzi foo() (w przykładzie). Będę edytować, aby to wyczyścić. – scones
Jeśli chcesz zrzucić plik źródłowy i trzymać się nagłówka (co jest potrzebne przy definiowaniu klasy/funkcji szablonu), możesz umieścić swoją implementację w nagłówku i nie musisz dodawać zakresu klasy przed deklaracja funkcji, ponieważ są to również definicje. – rbaleksandar