Objekt mit Übergabeparameter in Klasse erstellen



  • Hallo,

    bis jetzt habe ich folgenden Sachverhalt:
    ich würde gerne ein Objekt in einer klasse benutzen und habe folgendes probiert:
    Konstruktor

    ExampleClass::ExampleClass(Objekt & objekt): var(objekt){...do things...}
    

    in der main:

    int main(int argc, char** argv) {
    ...
    Objekt objekt(argv[1]);
    ExampleClass klasse(objekt);
    ...
    return 0;
    }
    

    im header der Klasse

    class ExampleClass {
    public:
     ExampleClass(Objekt & objekt);
    ...
    private:
    Objekt & var;
    ...
    };
    

    Also ich erstelle ein Objekt in der Main un übergebe die Referenz der Klasse. jedoch halte ich dann nicht die one definition rule ein.
    Das Problem ist, das Objekt was ich verwenden will hat als Übergabeparameter ein Char. Wenn ich jetz jedoch das objekt nicht übergeben will, sondern es nur in der Klasse anlegen will müsste ich ja folgendes tun:

    private:
    Objekt objekt('bla');
    

    jedoch erwartet der Kompiler so eine Funktion und kein Objekt.
    Hat jemand eine Idee, wie ich ein Objekt(mit Char als Übergabeparameter) in einer Klasse anlege, sodass die ganze Klasse auf das Objekt zugriff hat?



  • Warum meinst du, die one definition rule (ODR) nicht einzuhalten? Denn es kompiliert doch, oder?

    Um ein Objekt in einer Klasse mit Konstruktorparametern anzulegen, gehst du genauso wie bei der Übergabe deines Referenzparameters vor, d.h. mittels der Initialisierungsliste:

    ExampleClass::ExampleClass() : objekt("bla") {/*...do things...*/}
    

    Und im Header einfach

    private:
        Objekt objekt;
    

    Die logische Frage, die du dir dabei stellen mußt, ist: Ist das Objekt ein Teil der Klasse oder nur ein Verweis?



  • @cleppo sagte in Objekt mit Übergabeparameter in Klasse erstellen:

    private:
    Objekt objekt('bla');
    

    jedoch erwartet der Kompiler so eine Funktion und kein Objekt.

    Zeichenkettenliterale gehören in " nicht in ':

    private:
    Objekt objekt{ "bla" };
    


  • @th69
    Danke, für die schnelle Antwort,
    dein Vorschlag hat geholfen! 🙂

    War ja doch recht simpel, die Erfahrung fehlt halt noch bisschen bei mir.

    @Swordfish auch dir vielen Dank.