2010-02-17 67 views
1

你好。我正在爲我的課程進行C++作業。我幾乎完成了,但似乎無法找出這些錯誤:鏈接器錯誤 - 無法解析的外部符號

error LNK2001: unresolved external symbol "public: virtual void __thiscall HasQuarterState::dispense(void)const " ([email protected]@@UBEXXZ) gumball.obj Gumball 
error LNK2001: unresolved external symbol "public: virtual void __thiscall SoldState::turnCrank(void)const " ([email protected]@@UBEXXZ) gumball.obj Gumball 
fatal error LNK1120: 2 unresolved externals C:\School Work\CS 492\Gumball\Debug\Gumball.exe Gumball 

我去MSDN,擡頭LNK2001錯誤,但提供信息的壓倒性量,恐怕我就想不通考慮到我在使用C++方面的有限經驗,看看MSDN頁面時出了什麼問題。

但我確實認爲問題來自我構建程序的方式。我的老師說,如果我們也想使用一個.cpp文件,但我想最終我對Visual Studio/C++不太瞭解,無法完成這項工作。最終,我遇到了一些其他問題,我必須解決這個問題,它使用一個.cpp文件。

有問題的代碼/文件是在這裏:http://codepad.org/LpBeJT2Y

它是一個大的OLE混亂,但是這是我做了什麼:

  • 聲明名爲GumballMachine(沒有定義)類
  • 定義一個名爲State的類(它又有一個指向GumballMachine的指針)
  • 定義了幾個從狀態繼承的其他狀態類
  • 定義類GumballMachine
  • 定義了從其他狀態類的原始定義中排除的幾個函數。這是因爲這些函數依賴於GumbballMachine的定義函數,並且在GumballMachine函數被定義之前不會工作。
  • 無效的主要()

據我可以告訴(我有限的VS/C++的知識),代碼看起來要被罰款。也許有更多經驗的人會有所收穫。任何關於如何解決這個問題的指針?

感謝您的幫助。

回答

1

您已經在HasQuarterState中聲明瞭分配,但尚未定義它。該功能沒有正文。同樣在SoldState中使用turnCrank。

+0

我認爲這樣好嗎?就像它應該什麼都不做。我只包含它,因爲如果我沒有定義它,VS會給我錯誤。 – Chris 2010-02-17 04:30:54

+1

你必須聲明它,因爲SoldState是從State派生的。任何派生自State的事物必須實現它所定義的所有純虛方法(virtual void foo()= 0)。 SoldState必須有一些實現才能運行。只是宣佈與國家相同的方法是不夠的。你也必須實現它們。 – 2010-02-17 04:35:39

+0

如果您想分配無所事事,請將「;」與「{}」 - 這樣既是一個聲明,也是一個定義。 – 2010-02-17 04:37:09

0

在類SoldState中,turnCrank沒有定義。改變這個:
void turnCrank()const;
To this:
void turnCrank()const {cout < <「some implementation」< < endl; }

對於其他功能類似。

相關問題