0

我收到以下错误:

错误 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;
}

任何帮助表示赞赏。

4

2 回答 2

1

错误 C2259:“CDocument”:无法实例化抽象类

编译器准确地告诉你你需要知道什么。你不应该创建一个具体的实例CDocument——事实上你不能,正如你刚刚看到的那样。相反,引用 MSDN

要在典型应用程序中实现文档,您必须执行以下操作:

  • 为每种类型的文档从 CDocument 派生一个类。

你可能会问为什么。答案实际上也在 MSDN 上,尽管是以迂回的方式:

重写文档类中的 CObject::Serialize 成员函数,以在磁盘中写入和读取文档的数据。

当调用周围应用程序代码的保存方法时,它们可以针对CDocument*接口而不是具体类来编写。这使他们可以对每种类型的文档执行完全相同的操作——即调用serialize方法。

于 2012-08-20T14:12:01.023 回答
0

要从 WinApp 派生类访问文档对象,您需要这样做:

((CFrameWnd*)AfxGetMainWnd())->GetActiveDocument();

您无需每次都创建文档的新实例。在任何情况下,您都不能自己创建摘要文档。

于 2012-08-20T14:11:31.347 回答