2013-04-29 72 views
0

我是一個n00b,所以對任何事都正確。鏈接器命令在Xcode中與純虛擬對象失敗

我一直在這個工作了幾天,並已做了研究,但似乎無法解決問題。這是一個主要使用Visual Studio的編程類,我的許多同學都沒有問題。雖然,我在Xcode上,所以也許它與此有關。基本上,我創建一個名爲Geometric_Object與子類Circle.h和Rectangle.h一個純粹的虛擬對象,然而,當我運行代碼,我得到了以下錯誤:

Undefined symbols for architecture x86_64: 
"GeometricObject::GeometricObject()", referenced from: 
Circle::Circle() in main.o 
Rectangle::Rectangle() in main.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

我以後丟失。由於我沒有足夠的信譽點,因此我無法發佈所有鏈接,因此我必須在Dropbox上將它們壓縮爲一個。希望有人能繞過這個,所以沒有人害怕解壓縮內容。

https://dl.dropboxusercontent.com/u/82764116/Xcode.zip

+1

您無法「創建...純虛擬對象」。你*可以*創建一個*具體*對象,它是純虛擬類的*子類*。例如:'MyAbstractBaseClass * myObject = new MyConcreteSubclass()'。 – paulsm4 2013-04-29 21:15:07

+0

我只是試圖實例化圓和矩形應該不是是純虛擬的......他們應該嗎? – 2013-04-29 21:47:37

+0

我認爲你的文章說「我試圖創建一個純虛擬對象」。我說你不能。所以我想我們同意:)問:「GeometricObject()」是一個抽象類嗎?你爲它定義了一個構造函數嗎?如果是這樣,也許這就是問題所在:你爲「GeometricObject()」定義了一個顯式的構造函數,但是「Circle()」和「Rectangle()」都在尋找默認的(零參數)構造函數。 – paulsm4 2013-04-29 22:18:42

回答

0

的問題是完全錯誤的話。您尚未定義GeometricObject::GeometricObject()。您還沒有在GeometricObject中定義許多其他方法,如析構函數,getColor,setColor等。

我不確定這些函數的定義在哪裏,但它們不在代碼中,已聯繫到。 (例如)Rectangle::Rectangle()。只需以相同的方式定義GeometricObject::GeometricObject()(以及所有其他缺失的定義)。

+0

你說得很完美:「問題正是錯誤所說的,你沒有定義GeometricObject :: GeometricObject()。」然而,也許OP不需要*一個零參數的構造函數;也許他只是以編譯器認爲需要它的方式聲明或使用變量。有很多方法可以發生。例如:http://www.velocityreviews.com/forums/t281655-newbie-constructor-of-the-base-class-not-being-found.html – paulsm4 2013-04-29 23:36:32

相關問題