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 的函数。去掉括号。