Deklaration einer Klasse in anderer Klasse und definition dieser in cpp datei
-
ja hab ich
-
ich vermute es ist nicht standardkonform, vielleicht meckert der compiler deshalb.
-
Hallo,
was genau ist denn nicht standardkonform?
-
das wüsste ich jetzt aber auch gerne^^
achja, noch ne anmerkung:das funktioniert
//datei.cpp #include "header.h" class test::foo{ public: void bar(){ std::cout<<"blub"; int i; std::cin>>i; } }; void foo(){ test::foo b;//hier gehts b.bar(); }
das nicht:
#include "header.h" int main(int argc, char* argv[]) { test::foo a;//hier nicht return 0; }
-
Die Nested-Klasse muss in der Header-Datei definiert werden:
//h struct A { struct B; //hier können nur referenzen und //zeiger von B benutzt werden, //da die Definition erst später erfolgt }; struct A::B { void foo(); }; //cpp void A::B::foo() { }
-
omg, das is ja echt um 2 ecken gedacht...
aber es funktioniert
-
//sorry Müll
-
sorry für 3fachpost:
also, meine header datei sieht jetzt so aus:#ifndef File #define File #include <iostream> class test{ private: template<class U> class foo; public: typedef foo<int> bar; }; template<class T> class test::foo{ public: void bar(); }; #endif
so die cpp:
#include "File2.h" void test::foo<int>::bar(){ std::cout<<"blub"; }
so funktioniert das...aber wenn ich versuche, dass ganze etwas allgemeiner zu machen, dann kommt der compiler nich mehr weiter:
//die cpp #include "File2.h" template<class T> void test::foo<T>::bar(){ std::cout<<"blub"; }
fehler: unresolved external
so, dann hatte ich noch ne 3. möglichkeit ausprobiert://der header [cpp] #ifndef File #define File #include <iostream> template<class T> class test{ private: template<class U> class foo; public: typedef foo<T> bar; }; template<class T> class test<T>::foo{ public: void bar(); };
//die cpp #include "File2.h" template<class T> void test<T>::foo<T>::bar(){ std::cout<<"blub"; }
[C++ Error] File1.cpp(3): E2316 'test<T>::foo<T>::bar()' is not a member of 'test<T>::foo<T>'
ich seh schon, mit templates wird das ganze verdammt tückisch
//edit das letzte problem hab ich nun gelöst bekommen:template<class T>template<class U> void test<T>::foo<U>::bar(){ std::cout<<"blub"; }
nunja...fast...die unresolved external meldung hat den alten Fehler nun ersetzt
-
-
und dabei hab ich die FAQ schon durchsucht :wand:
najut, danke