因此,我有一個抽象類Product,其中包含字段名稱和價格。有跡象表明,從產品繼承了幾類,產品是抽象的原因是因爲這些子類必須實現這個功能(在產品定義):抽象類的C++輸出運算符
virtual std::string getCategory()=0;
類別是不是一個領域,它只是取決於它的子類我們有,並在某些情況下的價格。
現在,我要爲產品子類的輸出操作,但因爲我只是想打印的名稱和價格,我在Product.h這樣做:
friend std::ostream& operator<<(std::ostream& os, const Product& secondOperand);
而這Product.cpp:
ostream& operator<<(ostream& outputStream, Product& secondOperand){
outputStream << "["<<secondOperand.getName()<<" "<<secondOperand.getPrice()<<"]"<<endl;
return outputStream;
}
現在我得到這個錯誤在Visual Studio:
Error C2259: 'Product' : cannot instantiate abstract class
我不想實現THI每個子類的輸出(因爲我必須從字面上複製一切不理想的東西)。此外,我開始與產品不是純粹的虛擬,但然後我有鏈接器錯誤的getCategory()函數...
[C++抽象類操作符重載和接口強制問題]的可能重複(http://stackoverflow.com/questions/2059058/c-abstract-class-operator-overloading-and-interface-enforcement-question) – David 2014-11-22 13:34:42
*你在哪裏得到錯誤?它是完整的錯誤輸出嗎? – 2014-11-22 13:35:46
您正在顯示'const Product&'用於聲明,而'Product'用於執行。這種不匹配可能無法編譯。但是,此外,它讓我懷疑你在其他地方有一個錯誤,因爲你正在按值傳遞'Product',從而使編譯器認爲你想實例化一個,從而導致編譯錯誤。 – TheUndeadFish 2014-11-22 13:40:27