0

CDialogを取得してcppファイルにメモリスペースを設定できない理由がわかりません。ヘッダーファイルでのみ機能します。これは同じことではありませんか?ありがとう


ヘッダーファイル:

public:
    CDialog *m_pages[6];  // this works

ヘッダーファイル:

CDialog *m_pages;

cppファイル

m_pages = new CDialog[6];  //this fails

私が間違ったことを見た後(最初のポスター:「CDialogへの6つのポインターの配列を作成する」)。これは私が見逃したものです:(そして今ではうまくいきます!)

CDialog **m_pages = new CDialog*[6]; //double pointer
4

2 に答える 2

4

ドキュメントを確認してください。CDialogは、コンストラクターに少なくとも1つのパラメーターを必要とします。そのため、2番目の例では、デフォルトのコンストラクターがないため、CDialogを割り当てることができません。

最初の例では、への6つのポインターの配列を作成していますCDialogCDialogこれは、2番目の配列で割り当てようとしている6つの配列とは完全に異なります。

于 2012-04-08T18:46:39.993 に答える
1

これらのdeclは非常に異なります。これCDialog *m_pages[6];はCDialogへの6つのポインターm_pages = new CDialog[6];の配列ですが、6つのCDialogの配列です。

2番目の宣言を使用するには、次のようなことができると思います

#include <iostream>
using namespace std;

struct Object  {
    Object(int id) : id(id) {}
    int id;
};

void main_construct_vector()
{
    Object *a = new Object[2] {Object(1), Object(2)};
    cout << a[0].id << ' ' << a[1].id << endl;
}

そのコードは期待どおりに出力されます

1 2

間違いなく、これは通常の方法ではありません...

于 2012-04-08T19:04:21.557 に答える