Casting?
-
Hallo,
was muss ich machen, damit dieser Code funktioniert:
class B; class A { public: A() { } A(const B&) { } }; class B:private A { }; void Test(const A&) { } int main() { B b; Test(b); }main.cpp(24) : error C2243: 'type cast' : conversion from 'B *' to 'const A &' exists, but is inaccessibleEigentlich ist ja der passende Konstruktor vorhanden. Muss ich wirklich einen expliziten Casting-Operator anführen?
Danke...
-
class A { public: A() { } }; class B:private A { }; void Test(const A&) { } int main() { B b; Test(b); }
-
Funktioniert nicht. Wieder:
main.cpp(20) : error C2243: 'type cast' : conversion from 'B *' to 'const A &' exists, but is inaccessible
-
Du vererbst ja auch privat, d.h. nur die Schnittstelle und das bedeutet, daß ein B kein A ist.
Und dein Klassen-Design solltest du mal überdenken, da A und B gegenseitig voneinander abhängig sind.Funktioniert denn:
int main() { B b; Test(A(b)); }???
-
Jep, das geht. Der Punkt ist, dass jetzt aus Effizienzgründen B große Teile von A übernimmt (was sich aber später ändern kann), daher macht diese private Vererbung sinn. Naja, egal. Ich nehm einfach einen expliziten Casting-Operator, dann klappt es...
-
Muss ich wirklich einen expliziten Casting-Operator anführen?
Ja. Aus dem Namespace bohlen:: den dieter...
rya.
*scnr*
-
Ändere das einfach von privater Vererbung auf Komposition:
class B; class A { public: A() {} A(const B&) {} }; class B { private: A m_a; };Fertig.