0

我有一个名为 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();

4

2 回答 2

1

问题是 B 在 classC.cpp 中不可见。Chrate 文件 classB.cpp 并将 B 的声明移到那里。然后将其包含在 classC.cpp 中。

于 2013-06-20T14:03:25.533 回答
0

您忘记在 main.cpp 中包含“classB.h”!

于 2013-06-20T14:02:37.437 回答