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:

    1. spendiere der Klasse A einige Getter/Setter-M;ethoden, über die du zugreifen kannst.
    2. benenne B als Freund ('friend') von A
    3. 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!


Log in to reply