0

から継承するCDialog( と呼ばれる、および、などNBDialogのコントロールのいくつかの派生オブジェクトを設計しました。 これは 1 つのプロジェクトであり、コントロールは他のプロジェクトにあります。CEditCDateTimeCtrlCComboBox
NBDialog

当然、すべてのコントロールはダイアログに配置され、ダイアログのメソッドを使用する ため、リンカー用のファイル#include NBDialog.hを追加する必要があります。.lib

また、これらすべてのコントロールをダイアログから処理したいのでNBDialog.h、次の行に書きました。

class NBCommonEditBox; 
class NBDateTimeCtrl;
class NBCommonComboBox;

CMapWordToOb* NBGetEditBoxMap();
NBCommonEditBox* NBGetEditBoxById(unsigned long ID);

CMapWordToOb* NBGetDateTimeMap();
NBDateTimeCtrl* NBGetDateTimeById(unsigned long ID);

CMapWordToOb* NBGetComboBoxMap();
NBCommonComboBox* NBGetComboBoxById(unsigned long ID);

この方法NBDialog.hでは、オブジェクトのコンテキストはわかりませんが、それらが存在することを認識し、マップに格納します。

ここで、NBDialogプロジェクトを拡張し、すべてのコントロールの印刷情報を取得するメソッドを追加して、継承されたすべてのオブジェクトがNBDialogこのメソッドを使用できるようにします。印刷情報は、コントロールの実装で定義されます。

編集:でこのメソッドを記述した場合、コントロールのクラスのコンテキストがわからないNBDialog.cppため、コンパイルできません。NBDialog

CStringList* NBDialog::NBGetMainTexts()
{
    CStringList* mainTexts = new CStringList();

    POSITION pos;
    WORD key;
    NBCommonEditBox* currEdit = NULL;
    for (pos = this->NBGetEditBoxMap()->GetStartPosition(); pos != NULL;)
    {
        this->NBGetEditBoxMap()->GetNextAssoc(pos, key, (CObject*&)currEdit);
        currEdit->NBStringsToPrint(mainTexts);
    }
    return mainTexts;
}

目的のメソッドを記述する方法はありますか?

4

2 に答える 2

0

実装ファイル ( NBDialog.cpp) は#include、これを機能させるために必要なヘッダー (おそらくNBCommonComboBox.hなど)に対して自由です。.cppファイルは何によっても処理#includeされないため、循環インクルードの問題は発生しません。

于 2013-07-17T08:06:10.553 に答える