C++ 继承问题,基类指针不能指向子类

标签 c++

我有一个名为 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/

相关文章:

c++ - std::next 是 vector O(n) 还是 O(1)?

C++分配内存问题

c++ - 如何在 C++ 中移动指针?

c++ - 当我们覆盖 cv::Mat.data 时会发生什么

c++ - 为什么我必须在 POD 类型中重载 operator==?

c++ - 用于包括 guard 的名称?

c++ - Windows下编译时如何使用CMake的pkg_search_module()?

c++ - 在 for 循环中添加 "time interval"

python - Swig - 绑定(bind)一个方法,该方法返回对导向器类指针的引用

c++ - 为什么我可以使用 operator= 而不是 operator== 与 C++11 大括号初始化器?