g++ || OOP
-
Hi,
ich habe 2 Probleme wollt aber nicht extra einen 2.Thread erstellen.
Ich habe mehrere Klasse mit Deklaration im Header-File und Implementierung im cpp-File, sowie eine cpp-Datei mit der main()-Methode in der die Header-Files der Klassen inkludiert sind.
Wie muß ich das ganze jetzt übersetzen und verlinken? Hab bisher nur mit Java gearbeitet und, wenn ich dort nur die Main-Klasse compiliere, werden automatisch alle darin importierten Klassen auch compilert.
Wenn ich aber z.B: g++ Main.cpp schreibe (Main.cpp ist die Datei mit der main()-Methode s.o.), funktionert es nicht, weil dem Compiler die anderen Klassen nicht bekannt sind, obwohl ich die Header-Dateien inkludiert habe...
und 2.
habe ein objekt-orientiertes Problem und zwar habe folgende Klassen:class CKlasse_A { public: CKlasse_A(string a1, string a3, string a3, string a4) : m_a1(a1), m_a2(a2), m_a3(a3), m_a4(a4){} private: string m_a1; string m_a2; string m_a3; string m_a4; };
class CKlasse_B { public: CMusicDB() {Hier wird der vector m_b gefüllt}; private: vector <CKlasse_A*> m_b; };
Also in Klasse_B hab ich als Membervariable einen vector mit Elementen aus Klasse_A.
Wie kann ich jetzt eine Methode in Klasse_B schreiben, in der ich über den vector auf die Membervariablen der Klasse_A zugreifen kann?
Also, so in der Art wie:m_b[0]->m_a1
Das funktioniert aber nicht, weil ich keinen Zugriff auf private Membervariable der Klasse_A habe. Muss ich vielleicht zusätzlich eine Objekt Klasse_A in der Klasse_B definieren?
Könnt Ihr mir bitte einen paar Tipps geben?!
mfg,
soad
-
@1: Du mußt dem Compiler alle beteiligten CPP-Files übergeben, dann werden die auch am Ende zusammengelinkt (wie genau das geht, hängt von deinem Compiler ab).
@2: 'private' bedeutet, daß niemand von außen auf die Elemente zugreifen kann. Also hast du drei Möglichkeiten, zuzugreifen:
- spendiere der Klasse A einige Getter/Setter-M;ethoden, über die du zugreifen kannst.
- benenne B als Freund ('friend') von A
- pack die Strings in den public-Bereich der Klasse
-
@1: ok, da war ich etwas java-verwöhnt.
@2: ja, get/set ist die perfekte lösung.DANKE CStoll!