不确定为什么我不能接受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
答案 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
当然,这不是通常的方式......