2012-04-08 2 views
0

CDialog를 가져 와서 cpp 파일의 메모리 공간을 설정할 수없는 이유가 확실하지 않습니다. 헤더 파일에서만 작동합니다. 이게 똑같은가요 ??? 감사CDialog * m_pages [6]; 대 CDialog * m_pages = 새로운 CDialog [6];?


헤더 파일 :

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

documentation을 확인합니다. CDialog는 생성자에 적어도 하나의 매개 변수가 필요하므로 기본 생성자가 없기 때문에 두 번째 예제에서 CDialog를 할당 할 수 없습니다.

첫 번째 예에서는 CDialog에 대한 6 개의 포인터 배열을 만듭니다. 이것은 두 번째 배열에서 할당하려는 배열 인 6 개의 배열 CDialog과 완전히 다릅니다.

+0

런타임에 숫자를 조정하려면 :(6 -> 10), 어떻게해야합니까? thx – jdl

+0

'std :: vector's 나 다른 STL 컨테이너를 사용하십시오. – mfontanini

1

그 decls 매우 다르다 : 그것은 6가 CDialog의 배열이다 m_pages = new CDialog[6]; 동안이 CDialog *m_pages[6];, 6 포인터를 CDialog에 배열된다.

두 번째 선언을 사용하려면, 나는이 ...

를 이동하는 일반적인 방법이 아니다, 확실히
1 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; 
} 

처럼 그 코드 출력을 뭔가를 할 수 있다고 생각

관련 문제