未定义的引用
undefined reference
我有这些类(和函数):
template <class A>
class Factory{
public:
A (*binOp(void))(A,A);
};
int sum(int a, int b){
return a + b;
}
class IntFactory : public Factory<int>{
public:
int (*binOp(void))(int,int){
return ∑
}
};
template <class A>
class SpecializedList{
protected:
List<A>* list;
Factory<A>* factory;
public:
SpecializedList(List<A>* list,Factory<A>* factory){
this -> list = list;
this -> factory = factory;
}
A sum(){
return (list -> foldLeft(factory -> zero(), factory -> binOp()));
}
};
// in main
SpecializedList<int>* sl = new SpecializedList<int>(join1 -> getList(),new IntFactory());
cout << sl -> sum() << endl;
我收到错误:
/tmp/ccxdiwUF.o: In function
SpecializedList<int>::sum()':
list.cpp:(.text._ZN15SpecializedListIiE3sumEv[SpecializedList<int>::sum()]+0x19): undefined reference to
工厂::binOp()'list.cpp:(.text._ZN15SpecializedListIiE3sumEv[SpecializedList::sum()]+0x2c):`Factory::zero()'collect2:ld返回1退出状态有人知道为什么吗?我在谷歌上搜索错误消息的相关部分,当代码分散在不同的文件中时,它看起来与问题有关。我现在把所有东西都放在一个文件里。
两个问题:
- 工厂没有定义函数
binOp()
- 工厂甚至没有功能
zero()
解决方案:
-
通过将纯说明符指定为:,使函数
binOp()
成为Factory
中的纯虚拟函数virtual A (*binOp(void))(A,A) = 0; //"=0" is called pure-specifier //^^^^^^ this makes the function virtual
现在不需要来定义它(就链接器错误而言)。您也可以选择定义它。
-
在Factory中声明一个函数
zero()
。如果你不让它成为纯虚拟的,那么就必须定义它
相关文章:
- 编译C++时未定义的引用
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 对 Scalar ::Scalar() 的未定义引用
- 已定义函数时出现 G++ "未定义的引用"错误
- 链接 cmake 时出现未定义的引用错误
- 对复制 CTOR 和 CTOR 的未定义引用
- 错误:未定义对'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)'的引用
- 右值引用未定义的行为
- 对"vtable for DigitalClock"的未定义引用 - 未定义对"DigitalClock::staticMetaObject"的引用 - Qt
- 函数类型到函数类型的引用:未定义的引用
- avcodec_alloc_context引用未定义,但ffmpeg链接顺序正确
- 从c++调用Fortran子程序,链接时引用未定义
- 枚举引用未定义,但位于包含的头文件中