因此,我有一个抽象类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