对class_name<template_argument>function_name(变量)的未定义引用?
Undefined reference to class_name<template_argument>function_name(variable)?
我在下面的代码中遇到了一个致命的链接错误,它说:
]+0x10)||undefined reference to `base<node>::pass_derived(node)'|
我想定义一个base
类,它有一个名为poly_type
的指针,而base
类也可以从它自己内部"访问"另一个称为derived
的类。我遇到的问题是第poly_type->pass_derived(n);
行,编译器不想看到我试图传递node
类型对象的派生类。我猜这是C++的一个限制,如果是的话,请告诉我。这是损坏的代码,
edit这似乎是在其他地方问的,我更新了来源以反映这一观点。
基类中没有pass_deriven的定义。您将其声明为虚拟函数,但仅在派生类中定义它。因为它在主函数中实例化了base,所以编译器试图为base生成代码,但找不到pass_deriven的定义。
您可以添加一个默认实现,即使它只是空的。
至于你最终是否可以让它调用派生的::pass_derived…:)祝你好运,看起来很有趣。你正在构建自己的继承版本?
问题就在这里:
template < class T>
class base
{
// ...
virtual void pass_derived(T data);
};
您将pass_derived
声明为virtual
,但不是纯virtual
。因此,如果不提供实现,链接器将引发错误。
要么你提供一个实现,要么(我相信这是你的意图)你宣布它是纯virtual
:
virtual void pass_derived(T data) = 0;
但是不能实例化base<T>
,并且必须仅使用指向base
的指针或引用(实际上指向/引用derived
)。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 模块名称是否驻留在单独的"name space"中,或者它们可能与例如变量名称发生冲突?
- 变量"name"周围的堆栈已损坏C++
- CMake <PROJECT-NAME>_SOURCE_DIR 变量范围
- 声明为无效的变量或字段'name of var'
- 为什么我不能从我的 setMonth 函数更改类变量"name"?
- 变量周围的堆栈"variable name"已损坏C++
- C++当"extern int * name"引用不存在的变量,然后访问"name"时会发生什么
- 使用未初始化的局部变量"name"
- cin 用于在 OneClass 中设置变量'name'字符串
- 使用另一个变量创建name变量