我收到以下错误:
错误C2259:'CDocument':无法实例化抽象类
代码如下:
BOOL CVisuComm::OnOpenDoc()
{
CDocument myCDoc; //LINE AT WHICH THE ERROR OCCURS
CInterfaceDoc myCInterfaceDoc;
char tabchar[80]="c:/test111.dat";
CString myFilename;
myFilename="c:/test111.dat";
/*if(!myCDoc.OnOpenDocument(tabchar))
{
MessageBox("Erreur à l'ouverture..","OnOpenDocument",MB_OK);
return false;
}
else
{
MessageBox("Ouverture OK..","OnOpenDocument",MB_OK);
}*/
myCInterfaceDoc.OnOpenDocument("c:/test111.dat");
return true;
}
任何帮助表示感谢。
答案 0 :(得分:1)
错误C2259:'CDocument':无法实例化抽象类
编译器正在告诉您确切需要知道的内容。你不应该创建CDocument
的具体实例 - 事实上你不能,正如你刚才看到的那样。相反,to quote the MSDN:
要在典型应用程序中实现文档,您必须执行以下操作:
- 从CDocument中为每种类型的文档派生一个类。
你可能会问为什么。答案实际上也是在MSDN上,尽管是以迂回的方式:
覆盖文档类中的CObject :: Serialize成员函数,以便在磁盘上写入和读取文档的数据。
当调用周围应用程序代码的save方法时,可以针对CDocument*
接口而不是具体类来编写它们。这允许他们对每种类型的文档执行完全相同的操作 - 即调用serialize
方法。
答案 1 :(得分:0)
要从WinApp派生类访问文档对象,您需要这样做:
((CFrameWnd *)AfxGetMainWnd()) - > GetActiveDocument();
您不必每次都创建文档的新实例。无论如何,您无法自己创建抽象文档。