2012-05-24 70 views
0

當我編譯我的代碼,我得到了一組看似關係到輸出文件作爲.o文件將錯誤。我不確定爲什麼會出現這類錯誤。有任何想法嗎?編譯C++代碼時出現奇怪的輸出。有任何想法嗎?

/tmp/ccjPLJVV.o: In function `PubSub::~PubSub()': 
Video_process.cpp:(.text._ZN6PubSubD2Ev[_ZN6PubSubD5Ev]+0x12): undefined reference to `vtable for PubSub' 
/tmp/ccjPLJVV.o: In function `main': 
Video_process.cpp:(.text.startup+0x34): undefined reference to `vtable for PubSub' 
Video_process.cpp:(.text.startup+0xeb): undefined reference to `PubSub::run()' 
/tmp/ccjPLJVV.o:(.rodata._ZTI13Video_process[typeinfo for Video_process]+0x10): undefined reference to `typeinfo for PubSub' 
collect2: ld returned 1 exit status 

這實際上是我在試圖編譯時得到的輸出。

+0

@birryree oooops遺憾。那麼,你爲什麼不回答這個問題?這很奇怪,但這種類型的問題始終在這裏*。 – Walter

+0

@Walter - 我正在編輯問題時,Lucian已經回答了。 – birryree

+0

您是否忘記了簡單地鏈接到定義類「PubSub」的源代碼? – Walter

回答

1

您似乎沒有實現virtual方法。

class PubSub 
{ 
    //virtual destructors, although pure 
    //MUST have an implementation 
    virtual ~PubSub() = 0 { } 

    /*virtual?*/ void Run(); // <--- have you implemented this one? 
}; 
+0

ķ所以run方法不作爲的PubSub的頭文件虛擬聲明。所以我不應該執行它當然你應該 – user1415372

+0

@ user1415372。你應該實現你使用的所有方法。 –

+0

嗯......我的意思是運行函數已經實現了......我的意思是我不需要重載子類中的函數。 – user1415372

0

這是來自接頭,不是編譯器的錯誤消息。鏈接程序找不到一些它聲明但未定義的符號,它試圖將它們鏈接在一起以製作(很可能)可執行文件。解決方案是提供定義,即(編譯)代碼與這些定義。該代碼可能已經存在,你只需要(告訴鏈接到搜索符號有)「反對鏈接」或可能不會,在這種情況下,你必須提供它...

例如,添加文件定義PubSub類的實現來鏈接器/編譯器命令行應幫助...

0

也許你已經實現了方法,但是你有沒有聯繫了。如果您使用GCC,-o國旗是您的朋友;編譯main.cpp時,必須指定所有類.o文件。