C++ 未定义对类名称的引用<;模板参数>;函数名(变量)?

C++ 未定义对类名称的引用<;模板参数>;函数名(变量)?,c++,inheritance,polymorphism,undefined-reference,C++,Inheritance,Polymorphism,Undefined Reference,下面的代码中有一个致命的链接错误,它说: ]+0x10)||undefined reference to `base<node>::pass_derived(node)'| ]+0x10)| |对“base::pass_-derived(node)”的未定义引用| 我想定义一个base类,它有一个名为poly_type的指针,base类也可以从自身内部“访问”另一个名为derived的类。我遇到的问题是linepoly\u type->pass\u-derived(n)其中编译器

下面的代码中有一个致命的链接错误,它说:

]+0x10)||undefined reference to `base<node>::pass_derived(node)'|
]+0x10)| |对“base::pass_-derived(node)”的未定义引用|
我想定义一个
base
类,它有一个名为
poly_type
的指针,
base
类也可以从自身内部“访问”另一个名为
derived
的类。我遇到的问题是line
poly\u type->pass\u-derived(n)其中编译器不希望看到我试图在其中传递类型为
node
的对象的派生类。我猜这是C++的限制,如果是这样,请告诉我。这是坏代码


edit似乎有人在其他地方问过这个问题,我更新了源代码以反映这一观点。

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


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

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

问题在于:

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

但是您不能实例化
base
,只能使用指向
base
的指针或引用(实际指向/引用
派生的
).

缺少
base
的成员函数
pass\u-derived
的定义的可能重复。在其基类中创建派生类的对象肯定是错误的是,我尝试使用
虚拟无效pass\u-derived(T data)=0但随后它抱怨
基b1(1);碱基b0(0)?“但是您不能实例化base,只能使用指向base的指针或引用(实际上指向/引用派生的)。”我尝试了Graham Griffiths所说的方法,现在它可以工作了@lost_with_coding:我已经更新了答案,确切地说,“您可以添加一个默认实现,即使它只是空的。”是的,我刚刚在
base
类中添加了一个空的
虚拟无效传递{}
    virtual void pass_derived(T data) = 0;