链接器错误| collect2:错误:ld返回1退出状态

时间:2015-01-20 20:20:03

标签: c++ c++11 types linker auto

以下代码给出了链接器错误:

#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):对于CBase&#39;的`typeinfo的未定义引用   collect2:错误:ld返回1退出状态

删除create_class函数可修复错误。在原始代码中,create_class将是调用模板类的模板。所以请不要告诉我删除auto!

1 个答案:

答案 0 :(得分:2)

您还没有定义(提供正文)

virtual void myfunc();

确实,您不必定义您不会使用的功能,但对于非纯虚拟功能则不然。使函数纯虚拟(= 0)或提供​​定义。

顺便提及,

CMyclass a();

没有做你认为的事情。这不会定义CMyClass类型的对象。这声明了一个返回CMyclass的函数。摆脱括号。