Problem: Code compiled net
-
class Base { static const int class_data=5; }; class MyClass : public Base { }; int func(Base* a) { return (*a::class_data); } int main() { Base base; MyClass mc; cout << func(&base) << ' ' << func(&mc) << endl; return 0; }
-
Die Frage ist, was du überhaupt erreichen möchtest?
#include <iostream> class Base { public: static const int class_data=5; }; class MyClass : public Base { }; int func(Base* a) { // Hier geht auch einfach: // return Base::class_data; // oder auch: // (*a).class_data; return (a->class_data); } int main() { Base base; MyClass mc; std::cout << func(&base) << ' ' << func(&mc) << std::endl; return 0; }
-
AufmSchlauchSteher schrieb:
return (*a::class_data);
Was soll das sein? Der Scope-Operator erwartet auf der linken Seite eine Klasse oder einen Namensraum, nicht ein Objekt.
Meinst du vielleicht:return Base::class_data;
oder auch
return a->class_data;
Beides wäre syntaktisch korrekt. Allerdings ist class_data private und deshalb nicht von außen referenzierbar.
-
HumeSikkins schrieb:
AufmSchlauchSteher schrieb:
return (*a::class_data);
Was soll das sein? Der Scope-Operator erwartet auf der linken Seite eine Klasse oder einen Namensraum, nicht ein Objekt.
Meinst du vielleicht:return Base::class_data;
oder auch
return a->class_data;
Klar, meine ich.
Beides wäre syntaktisch korrekt. Allerdings ist class_data private und deshalb nicht von außen referenzierbar.
Aber class_data ist doch static.
-
Bitte letzten Post ignorieren
-
AufmSchlauchSteher schrieb:
Aber class_data ist doch static.
Und? Zu Fuß ist's auch schneller als über'n Berg. Das eine hat mit dem anderen aber nichts zu tun. Die Access-Level gelten in C++ unabhängig davon ob deine Daten/Methoden statische/nicht-statisch sind.