Klassenhierarchie und Interoperation
-
Hallo.
Um mein Programm etwas übersichtlicher zu gestalten, habe ich mir gedacht eine kleine Klassenhierarchie einzubauen. Dazu wollte ich 3 Funktionsklassen anlegen, die aber alle miteinander operieren müssen. Das heißt, ich muss sowohl innerhalb der Klasse A auf die Klasse B zugreifen können und umgekehrt.
Nach ein paar Stunden googeln habe ich dann schließlich aufgegeben.
Der Code sieht folgendermaßen aus (Ausschnitt der nicht funktioniert):
main.cpp
#include <iostream> #include <string> #include "user.cpp" int main(void) { classUser::addUser(std::string("Ich")); }user.cpp
#include <string> class classUser { public : static std::string aktuellerUser; static void addUser(std::string strUser) { aktuellerUser = strUser; } };Ich weiß nicht wieso, aber Microsoft Visual Studio schaffst bei mir den Code zu kompilieren, aber das genügt mir nicht, der gcc/g++ soll es auch können

Das ist meine Fehlermeldung:
g++ ./main.cpp
/tmp/ccBhS5v1.o: In function
classUser::addUser(std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >)': main.cpp:(.text.\_ZN9classUser7addUserESs[classUser::addUser(std::basic\_string<char, std::char_traits<char>, std::allocator<char> >)]+0x10): undefined reference toclassUser::aktuellerUser'
collect2: ld returned 1 exit status
-
g++ main.cpp user.cpp
musst ihm ja auch sagen dass er user.cpp mitkompilieren soll. kann er ja nicht riechen welche dateien du alle kompilieren willst...
-
Vor allem fehlt dort die Definition der statischen Variable (die Nennung in der Klassendefinition ist nur eine Deklaration). Und es deutet immer auf (potentielle) Probleme hin, wenn du CPP-Files inkluden mußt oder willst. Besser sieht es so aus:
//main.cpp #include <iostream> #include <string> #include "user.h" int main(void) { classUser::addUser(std::string("Ich")); }//user.h #include <string> class classUser { public : static std::string aktuellerUser; static void addUser(std::string strUser); };//user.cpp #include "user.h" std::string user::aktuellerUser;//da hast du die benötigte Definition der statischen Variable void user::addUser(std::string strUser) { aktuellerUser = strUser; }(PS: Was hat die Frage denn mit Klassenhierarchien zu tun?
-
Funktioniert
... Danke, das mit den Header Dateien ist ne gute Sache, sonst hatte ich immer das Problem, dass ich nie wusste, welche Datei ich zu erst inkludieren sollte, weil beide voneinander abhingen.Für meine "Nachwelt" (dort hat sich nen kleiner Tippfehler eingeschlichen)...
//user.cpp #include "user.h" std::string classUser::aktuellerUser;//da hast du die benötigte Definition der statischen Variable void classUser::addUser(std::string strUser) { aktuellerUser = strUser; }
-
Chrono007 schrieb:
(dort hat sich nen kleiner Tippfehler eingeschlichen)
Das war kein Tippfehler, das war Absicht
(behaupte ich jetzt mal)