0

以下有错误

错误 LNK2001:未解析的外部符号“public:virtual void __thiscall C::Foo(void)”(?Foo@C@@UAEXXZ)

所以基本上C::Test()不能B::Test()自动继承实现,我们必须每次都用 C++ 显式编写它?

class A
{

public:  
    virtual void Foo()=0;
    virtual void Test()=0;

};

class B: public A 
{
public: 
    virtual void Foo();
    virtual void Test()=0;

};

void B::Foo()
{

}



class C: public B
{
public:
    void Foo();
    void Test();
};



void C::Test()
{
}
4

3 回答 3

4

如果你的派生类从父类声明了一个虚方法,就像C一样void Foo(),那么它也必须实现它。如果你想继承B的实现,那么不要void Foo()C.

class C: public B
{
public:
    void Test();
};
于 2013-05-21T18:48:24.163 回答
0

您已将 A::Test() 设为纯虚拟,因此子类必须实现它。

这就是A::Test()=0语法的意思。

如果您删除=0并在父类中提供实现,则无需在子类中实现它。

于 2013-05-21T18:47:02.847 回答
0

您只需要抽象基类中的纯虚函数即可进行动态绑定。

编辑:我很确定您需要实现所有功能,即使它们是空的。这就是为什么它不会为你编译。

class A
{
    public:  
    virtual void Foo()=0;
    virtual void Test()=0;
};

class B: public A
{
    public: 
    void Foo();
    void Test();
};

void B::Foo()
{

}
void B::Test()
{

}


class C: public B
{
    public:
    void Foo();
    void Test();
};


void C::Foo()
{

}
void C::Test()
{
}
于 2013-05-21T18:49:05.870 回答