只有纯虚拟函数的类中的构造函数会导致派生类中的错误

Constructors in class with only pure virtual functions causes errors in derived classes

本文关键字:派生 错误 构造函数 函数 虚拟      更新时间:2023-10-16

我有一个抽象类IPrinter,它只包含纯虚拟函数。

using namespace std;
class IPrinter
{
public:
    virtual void Print() =0;
    virtual void Print(string) = 0;
    virtual void SetStreamData(string) =0;
private:
    IStreamBehavior* streamBehavior;
    string _name;
};

以及实现它的类

class HtmlPrinter :
    public IPrinter
{
public:
    HtmlPrinter();
    HtmlPrinter(IPrinter*);
    ~HtmlPrinter();
    virtual void Print();
    virtual void Print(string);
    vector<string> GetPrintList();
    virtual void SetStreamData(string);
private:
    IPrinter* printer;
    string streamData;
    void Paragraph();
};

cpp

HtmlPrinter::HtmlPrinter()
{
}
//error on this line
HtmlPrinter::HtmlPrinter(IPrinter* printer) :printer(printer){}
void HtmlPrinter::Print()
{
    this->printer->Print();
}
void HtmlPrinter::Print(string s)
{
}
vector<string> HtmlPrinter::GetPrintList()
{
    vector<string> myStrings;
    return myStrings;
}
void HtmlPrinter::SetStreamData(string streamData)
{
    this->streamData = streamData;
}
HtmlPrinter::~HtmlPrinter()
{
}
void HtmlPrinter::Paragraph()
{
    string old = streamData;
    streamData += "<p>" + old += "</p>";
}

当我向IPrinter添加构造函数或析构函数时,我在HtmlPrinter的构造函数中得到一个错误,该构造函数使用IPrinter*。为什么我不能向IPrinter添加构造函数/析构函数?

错误消息:

Error   2   error LNK2019: unresolved external symbol "public: __thiscall 
    IPrinter::IPrinter(void)" (??0IPrinter@@QAE@XZ) referenced in function "public: __thiscall HtmlPrinter::HtmlPrinter(class IPrinter *)" (??0HtmlPrinter@@QAE@PAVIPrinter@@@Z)    C:Usersdarrindocumentsvisual studio 2013ProjectsShapeStoreShapeStoreHtmlPrinter.obj ShapeStore

我在你的代码中没有发现任何错误。检查一下

<script src="http://ideone.com/e.js/1HWcfn" type="text/javascript" ></script>

http://ideone.com/1HWcfn