Kein Standard?
-
class BASIS { protected: int i; }; class KIND : public BASIS { void Funktion(BASIS* other) { i = other->i; } };Gibt mit VC++ 6.0 den Fehler:
c:\testobj.h(133) : error C2248: 'i' : cannot access protected member declared in class 'BASIS' c:\msdev\gpi200\wfleisch\fleischobj.h(127) : see declaration of 'i'Aber warum??
-
Weil "other" nicht "this" ist.
Die Instanz 'this' erbt i von seiner Basis-Klasse. Other ist aber ein ganz andere Instanz und da gelten auch die üblichen Regeln: auf Protected darfst Du nicht zugreifen.Du könntest hingehen und BASIS erklären, dass KIND eine friend class ist.
class BASIS { friend class KIND; protected: int i; };Dann würde es gehen, weil KIND auf alle (inkl. der private) Member von BASIS zugreifen darf.
-
Vielen Dank!!
-
Also meiner Meinung nach sollte es so funktionieren, und wenn KIND als friend deklariert ist, kann es trotzdem nur auf protected Members zugreifen und nicht auf private.
Schreib die Funktion mal in einer seperaten Quellcode Datei, höchstwahr. ist es wieder nur ein VC 6.0 typischer Fehler.Kann natürlich auch sein, dass ich ein totales Blackout habe und Krösus vollkommen recht hat

-
Gern geschehen.
friend sollte man allerdings sparsam bis gar nicht verwenden.
Für einen Programmierer sind zuviele Friends keine gute Sache, das untergräbt die Autorität der Programmiersprache. ;->
-
Xin schrieb:
Weil "other" nicht "this" ist.
wieso funktioniert dann
class a { private: int b; public: void a(a * other) { b = other -> b; } };???
ich denke auch, dass das ein bug ist.
-
Das ist kein Bug, das ist tatsächlich bei protected so.
-
Bashar schrieb:
Das ist kein Bug, das ist tatsächlich bei protected so.
hmm. der g++ schluckt das.
-
c++0xcafebabe schrieb:
Bashar schrieb:
Das ist kein Bug, das ist tatsächlich bei protected so.
hmm. der g++ schluckt das.
protected.cpp: In member function
void KIND::Funktion(BASIS*)': protected.cpp:4: error:int BASIS::i' is protected
protected.cpp:10: error: within this context
-
Bashar schrieb:
c++0xcafebabe schrieb:
Bashar schrieb:
Das ist kein Bug, das ist tatsächlich bei protected so.
hmm. der g++ schluckt das.
protected.cpp:10: error: within this context
Es geht um g++... da ist das Kompilierverhalten versionsabhängig... ich kompiliere auch mit g++, ich kenne diese <zyn>Späße</zyn>...
-
Xin schrieb:
da ist das Kompilierverhalten versionsabhängig...
Inwiefern? Die werden doch nicht absichtlich in neueren Versionen solche Fehler einbauen.
-
Xin schrieb:
Die Instanz 'this' erbt i von seiner Basis-Klasse. Other ist aber ein ganz andere Instanz
es geht nicht nicht, weil other eine andere instanz ist, sondern weil other vom typ BASIS* ist. mit KIND* würde es gehen.
-
Bashar schrieb:
Xin schrieb:
da ist das Kompilierverhalten versionsabhängig...
Inwiefern? Die werden doch nicht absichtlich in neueren Versionen solche Fehler einbauen.
sorry, war mein fehler. gibt doch nen fehler.