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

时间:2012-08-20 14:01:08

标签: c++ visual-studio visual-c++ compiler-errors visual-studio-2005

我收到以下错误:

  

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

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

  

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

编译器正在告诉您确切需要知道的内容。你不应该创建CDocument的具体实例 - 事实上你不能,正如你刚才看到的那样。相反,to quote the MSDN

  

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

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

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

  

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

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

答案 1 :(得分:0)

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

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

您不必每次都创建文档的新实例。无论如何,您无法自己创建抽象文档。