Linker error | collect2: error: ld returned 1 exit status
Linker error | collect2: error: ld returned 1 exit status
以下代码给我链接器错误:
#include <iostream>
using namespace std;
class CBase
{
public:
virtual void myfunc();
CBase()
{
// constructor
}
};
class CMyclass: public CBase
{
public:
CMyclass(): CBase()
{
// constructor
}
void myfunc()
{
}
};
auto create_class()-> CMyclass
{
return CMyclass();
}
int main()
{
// auto sys_conrollable = create_class();
CMyclass a();
return 0;
}
运行 编译器没问题:
g++ -g -Wfatal-errors -std=c++11 main.cpp -c -o main.o
链接器:
g++ -g -Wfatal-errors -std=c++11 main.o -o run
出现此错误:
main.o:(.rodata._ZTI8CMyclass[_ZTI8CMyclass]+0x10): undefined reference to `typeinfo for CBase'
collect2: error: ld returned 1 exit status
删除 create_class
函数修复了错误。在原始代码中,create_class
将是一个调用模板 class 的模板。所以请不要告诉我删除自动!
您还没有定义(提供正文)
virtual void myfunc();
的确,您不必定义您不使用的函数,但对于非纯虚函数则不然。将函数设为纯虚函数 (= 0
) 或提供定义。
顺便说一句,
CMyclass a();
并不像您认为的那样。这没有定义 CMyClass
类型的对象。这声明了一个 returns CMyclass
的函数。去掉括号。
以下代码给我链接器错误:
#include <iostream>
using namespace std;
class CBase
{
public:
virtual void myfunc();
CBase()
{
// constructor
}
};
class CMyclass: public CBase
{
public:
CMyclass(): CBase()
{
// constructor
}
void myfunc()
{
}
};
auto create_class()-> CMyclass
{
return CMyclass();
}
int main()
{
// auto sys_conrollable = create_class();
CMyclass a();
return 0;
}
运行 编译器没问题:
g++ -g -Wfatal-errors -std=c++11 main.cpp -c -o main.o
链接器:
g++ -g -Wfatal-errors -std=c++11 main.o -o run
出现此错误:
main.o:(.rodata._ZTI8CMyclass[_ZTI8CMyclass]+0x10): undefined reference to `typeinfo for CBase' collect2: error: ld returned 1 exit status
删除 create_class
函数修复了错误。在原始代码中,create_class
将是一个调用模板 class 的模板。所以请不要告诉我删除自动!
您还没有定义(提供正文)
virtual void myfunc();
的确,您不必定义您不使用的函数,但对于非纯虚函数则不然。将函数设为纯虚函数 (= 0
) 或提供定义。
顺便说一句,
CMyclass a();
并不像您认为的那样。这没有定义 CMyClass
类型的对象。这声明了一个 returns CMyclass
的函数。去掉括号。