2015-01-20 130 views
1

下面的代碼給我鏈接錯誤:鏈接器錯誤| collect2:錯誤:LD返回1退出狀態

#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將是調用模板類的模板。所以請不要告訴我去除汽車!

+0

@πάνταῥεῖ無關鏈接 – barej 2015-01-20 20:54:07

+2

@πάνταῥεῖ我假設你甚至不明白的問題都沒有。它是一個具體的問題,你鏈接到一個普遍的問題。它就像喜歡一個頁面談論什麼是編程!擁有20K的聲譽並不會讓你變得正確。 – barej 2015-01-20 21:03:30

+0

如何從鏈接副本[此答案](http://stackoverflow.com/a/12574403/1413395)不解釋您的問題? [請在你的問題中詳細說明](http://stackoverflow.com/posts/28054426/edit)你的情況在這裏沒有得到回答。你想在'CBase'類中聲明一個像'virtual void myfunc()= 0;'這樣的抽象函數嗎? – 2015-01-20 21:27:19

回答

2

您還沒有定義(提供身體)

virtual void myfunc(); 

這是事實,你不必定義你不使用的功能,但事實並非如此非純虛功能。可以使該功能爲純虛擬(= 0)或提供定義。

順便說一句,

CMyclass a(); 

沒有做什麼,你認爲它。這沒有定義類型爲CMyClass的對象。這聲明瞭一個返回CMyclass的函數。擺脫括號。

相關問題