CDialog * m_pages [6]; vs CDialog * m_pages =新的CDialog [6];?

时间:2012-04-08 18:39:28

标签: c++ visual-c++ mfc

不确定为什么我不能接受CDialog并在cpp文件中设置内存空间。它只适用于头文件。这不是一回事???感谢


标题文件:

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

标题文件:

CDialog *m_pages;

cpp文件

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

看到我做错了之后(第一张海报:“创建了一个指向CDialog的六个指针的数组”)。 这是我错过的:(现在它有效!)

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

2 个答案:

答案 0 :(得分:4)

检查documentation。 CDialogs在构造函数中至少需要一个参数,这就是为什么你不能在第二个例子中分配它们,因为它们没有默认的构造函数。

在第一个示例中,您将创建一个包含指向CDialog的六个指针的数组。这与六个CDialog的数组完全不同,这是您尝试在第二个{{1}}中分配的数组。

答案 1 :(得分:1)

这些decls非常不同:这个CDialog *m_pages[6];是一个包含6个指针的数组到CDialog,而m_pages = new CDialog[6];是一个包含6个CDialog的数组。

要使用第二个声明,我认为您可以执行类似

的操作
#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

当然,这不是通常的方式......