Ich würde gerne den Typ einer Superklasse überprüfen A
gegen den Typ einer Unterklasse B
(mit einer Methode innerhalb der Oberklasse A
, so dass B
erben wird).
Hier ist, was ich dachte, hat den Trick gemacht (d.h. die Verwendung der Vorwärtserklärung):
#include <iostream>
#include <typeinfo>
using namespace std;
class B;
class A {
public:
int i_;
void Check () {
if (typeid (*this) == typeid (B))
cout << "True: Same type as B." << endl;
else
cout << "False: Not the same type as B." << endl;
}
};
class B : public A {
public:
double d_;
};
int main () {
A a;
B b;
a.Check (); // should be false
b.Check (); // should be true
return 0;
}
Dieser Code lässt sich jedoch nicht kompilieren. Der Fehler, den ich bekomme, ist:
main.cc: In member function ‘void A::Check()’:
main.cc:12: error: invalid use of incomplete type ‘struct B’
main.cc:6: error: forward declaration of ‘struct B’
Wie könnte ich dieses Problem lösen?