0

我在下面的代码中遇到了一个致命的链接错误,它说:

]+0x10)||undefined reference to `base<node>::pass_derived(node)'|

我想定义一个base类,它有一个名为的指针poly_type,并且base该类还可以从其自身内部“访问”另一个名为derived. 我遇到的问题是poly_type->pass_derived(n);编译器不想看到我试图传递类型对象的派生类node。我猜这是 C++ 的限制,如果是这样,请告诉我。这是损坏的代码,

编辑似乎已经在其他地方提出过这个问题,我更新了源代码以反映该观点。

4

2 回答 2

1

基类中没有 pass_derived 的定义。您将其声明为虚函数,但仅在派生类中定义它。因为它在 main 函数中实例化 base,所以编译器尝试为 base 生成代码,但它没有找到 pass_derived 的定义。

您可以添加一个默认实现 - 即使它只是空的。

至于你最终是否可以让它调用derived::pass_derived... :) 祝你好运,它看起来很有趣。您正在构建自己的继承版本?

于 2013-08-02T08:32:34.587 回答
1

问题在这里:

template < class T>
class base
{
    // ...
    virtual void pass_derived(T data);
};

您声明pass_derivedvirtual但不纯virtual。因此,如果您不提供实现,链接器会引发错误。

你要么提供一个实现,要么(我相信这是你的意图)你声明它是纯的virtual

    virtual void pass_derived(T data) = 0;

但是你不能实例化base<T>并且只能使用指针或引用base(实际上指向/引用derived)。

于 2013-08-02T08:33:08.743 回答