class 'foo' is implicitly friends with itself



  • Hallo,

    ich habe die folgende Klasse geschrieben...

    class foo
    {
    friend class foo;
    private:
    vect* vect1;
    vect* vect2;
    ...
    public:
        foo(...);
        ~foo();
        bool operator==(foo vergl);
    ...
    };
    
    bool foo::operator==(foo vergl)
    {
        if (vect1 == vergl.vect1)
    	..... 
    }
    

    aber bei diesem code bekomme ich den oben genannten Compilerfehler.
    Ich weiß, dass ich mit dem Borland C Builder schonmal eine eine Klasse zum friend itself gemacht habe.
    Warum funktioniert das mit dem gcc nicht?



  • heuki schrieb:

    Ich weiß, dass ich mit dem Borland C Builder schonmal eine eine Klasse zum friend itself gemacht habe.

    Äh wozu? 😕



  • genau zu dem zweck ich es auch in diesem Beispiel brauche...
    Ich habe zwei Instanzen einer Klasse, die gegenseitig die Elemente der anderen lesen können sollen.

    Für solche Zwecke nimmt man doch friend oder?
    Oder habe ich irgendwas falsch verstanden??



  • In C++ ist die Sichtbarkeit von Klassenelementen klassenbasiert und nicht instanzbasiert, d.h. du kannst von einer Memberfunktion von Klasse A auf alle Elemente der Klasse A zugreifen, egal ob das nun die eigene oder eine fremde Instanz ist.

    Beispiel:

    class A {
      private:
        int a;
      public:
        // prinizipiell sinnlos, den Op. = hier zu implementieren, nur als Beispiel
        A& operator=(const A& other) {
          a = other.a;
        }
    };
    

    (das ist nicht in allen Sprachen so, in Eiffel beispielsweise gibts eine Art ultra-private, was nur von Membern der eigenen Instanz benutzt werden kann)



  • das ist nicht in allen Sprachen so

    In welchen Sprachen ist das überhaupt so?
    Ich weiß, dass in Smalltalk und Ruby private Instanzbezogen ist. In Java ist es ähnlich wie in C++. Es steht also 2:3 🙂


Anmelden zum Antworten