我有一个名为 classA.h 的文件,如下所示
#include <iostream>
using namespace std;
class A
{
public:
virtual void doSomething();
};
void A::doSomething()
{
cout << "inside A" << endl;
}
然后我有一个如下所示的ClassB.cpp
#include "classA.h"
class B : public A
{
public:
void doSomething();
};
void B::doSomething()
{
cout << "class B" << endl;
}
然后我有如下所示的classC.cpp
#include <iostream>
#include "classA.h"
using namespace std;
class C : public B
{
public:
void doSomething();
};
void C::doSomething()
{
cout << "classC" << endl;
}
int main()
{
A * a =new C();
a->doSomething();
return 0;
}
当我编译如下所示时,出现错误
g++ -Wall classB.cpp classC.cpp -o classC
classC.cpp:7: error: expected class-name before '{' token
classC.cpp: In function 'int main()':
classC.cpp:21: error: cannot convert 'C*' to 'A*' in initialization
既然 C 继承自 B,而 B 继承自 A,为什么我不能说 A * a = new C();
最佳答案
问题是 B 在 class.c++ 中不可见。创建文件 classB.cpp 并将 B 的声明移到那里。然后将它包含在 class.cpp>
关于C++ 继承问题,基类指针不能指向子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17215525/