首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CDialog *m_pages[6];vs CDialog *m_pages =新CDialog[6];?

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

Stack Overflow用户
提问于 2012-04-08 18:39:27
回答 2查看 155关注 0票数 0

不知道为什么不能接受CDialog并在cpp文件中设置内存空间。它只在头文件中工作。这不是一回事吗??谢谢

头文件:

代码语言:javascript
复制
public:
    CDialog *m_pages[6];  // this works

头文件:

代码语言:javascript
复制
CDialog *m_pages;

cpp文件

代码语言:javascript
复制
m_pages = new CDialog[6];  //this fails

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

代码语言:javascript
复制
CDialog **m_pages = new CDialog*[6]; //double pointer
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-08 18:46:39

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

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

票数 4
EN

Stack Overflow用户

发布于 2012-04-08 19:04:21

这些标记非常不同:这个CDialog *m_pages[6];是一个指向CDialog的6个指针数组,而m_pages = new CDialog[6];是一个6 CDialog的数组。

要使用第二个声明,我认为您可以这样做

代码语言:javascript
复制
#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;
}

如预期的代码输出

代码语言:javascript
复制
1 2

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10065334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档