0

不知道为什么我不能使用 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
4

2 回答 2

4

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

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

于 2012-04-08T18:46:39.993 回答
1

这些 decl 非常不同:这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

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

于 2012-04-08T19:04:21.557 回答