2013-10-07 65 views
1

最近,我偶然发现了另一个C++问题,这给我带来很多困难。假设我们有小程序:指向虚拟类

class A { 
    public: 
    virtual bool c() = 0; 
    virtual bool b() = { return false; }; 
    virtual ~A() {} 
} 

class B : public A { 
    public: 
    bool b() = { return true; }; 
    ~B() {} 
} 

... 

void c(A *pointer) { 
    if (pointer->b()) { 
    cout << "Derived class"; 
    } 
} 

在这种情况下,编译器的方法C()与误差“成员访问到不完整的类型A”的“如果”行返回错误。有人可以解释为什么编译器返回这样的错误吗?如果解除异常确实是正确的,那我该如何预防呢?

非常感谢!

+2

你真的试着编译你发布的代码吗?代码中有几处语法错误。顺便说一下:我复制了你的代码并修复了简单的错误。一切都很好。 –

回答

3

“不完整的类型A”表示在您正在编译的代码中(但不是您发布的代码),在c中使用它之前没有定义A。您需要将该定义放在与c相同的源文件中,或者从该源文件包含的头文件中。

+0

确实!我刚刚意识到我忘了包含“A”的定义。不管怎么说,还是要谢谢你! – jrbn