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 に答える