Ich möchte B::func2(int x, int y)
in A::func1(x)
aufrufen, wie man sie deklariert?C++ erben, wie die Methode der Unterklasse in baseclass-Methode aufrufen?
class A {
public:
void func1(int x);
virtual void func2(int x, int y); // do not need implement in A
};
class B : public A {
public:
void func2(int x, int y) override; // override
};
void A::func1(int x) {
int y;
func2(x, y); // I want to use the version of A's subclass
}
int main()
{
B b;
b.func1(x); // call A::func1(x) first then call B::func2(x, y)
}
Es wird nicht, stattdessen wird folgende Fehlermeldung kompilieren wird
> clang++ test.cpp -std=c++11
Undefined symbols for architecture x86_64:
"typeinfo for A", referenced from:
typeinfo for B in test-bbac7f.o
"vtable for A", referenced from:
A::() in test-bbac7f.o
NOTE: a missing vtable usually means the first non-inline virtual member > function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Das passiert nicht schon mit dem Code, den Sie anzeigen? Wie hast du es getestet? Welche Ergebnisse erhalten Sie und welche Ergebnisse haben Sie erwartet? –
Warum möchten Sie 'B :: func2()' in 'A :: func1()' aufrufen? Was benötigen Sie, wenn das eigentliche Objekt kein 'B' ist? – Peter