我現在看起來在多態性方面存在問題。我有一個名爲Asset的基類,然後是從該類繼承的3個類 - Bond,Saving和Stock。 Asset類中有一個名爲value()的函數,它不在這個類中實現,而是在每個派生類中實現。我遇到了一些錯誤,並被告知我應該使功能virtual
停止編譯器告訴我,我從來沒有實現該功能。但現在我得到錯誤Warning: control reaches end of non-void function
,我的代碼將無法運行。我剛剛在代碼的開頭添加了一個cout << "Testing";
,但仍然沒有任何結果。這是我的資產類,然後是其中一個實施的功能。警告:控制達到非無效功能的結束 - Qt應用程序
Asset.h
#ifndef ASSET_H
#define ASSET_H
#include <QString>
#include <QDate>
class Asset
{
public:
Asset(QString, QDate);
virtual double value() {};
QString getDescription();
QString getType();
protected:
QString type;
QDate date;
private:
QString description;
};
#endif
Stock.cpp value function
double Stock::value()
{
return sharePrice*numShares;
}
我知道這是艱難的試圖拼湊出我的代碼片段。發佈所有文件似乎不太合適,有一些。但是如果您想查看,我已將整個項目鏈接到Google雲端硬盤。
如果您沒有在基類中實現函數,則必須將其設置爲* pure * virtual。但是由於你沒有顯示所有相關的代碼,人們只能猜測你在做什麼。請提供[SSCCE](http://sscce.org) –
您有'價值'功能的多重定義。似乎你的代碼的正確方法是用'double value();'替換類中的一個,除非你的意思是它被覆蓋,在這種情況下'virtual double value();'。如果這是一個基類,它應該可能有一個虛擬析構函數。 – chris
1.不要使用浮動貨幣。 2.閱讀警告並重新閱讀,直到您理解它。它表示它正在達到非void函數的末尾,並且沒有返回的值。你不能把它掛起來。這正是你的Asset :: value()函數正在做的事情。 – user3427419