2012-04-08 11 views
0

Nicht sicher, warum ich CDialog nicht nehmen und den Speicherplatz in der cpp-Datei festlegen kann. Es funktioniert nur in der Header-Datei. Ist das nicht das Gleiche? DankCDialog * m_pages [6]; vs CDialog * m_pages = neuer CDialog [6] ;?


Headerdatei:

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

Headerdatei:

CDialog *m_pages; 

CPP-Datei

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

Nachdem ich gesehen habe, was ich falsch gemacht habe (1. Poster: "Erstellen eines Arrays von sechs Zeigern zu CDialog"). Dies ist, was ich verpasst: (! Und jetzt funktioniert es)

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

Antwort

4

die documentation prüfen. CDialogs benötigen mindestens einen Parameter in ihrem Konstruktor, weshalb Sie sie in Ihrem zweiten Beispiel nicht zuordnen können, da sie keinen Standardkonstruktor haben. In Ihrem ersten Beispiel erstellen Sie ein Array von sechs Zeigern zu CDialog. Das ist völlig anders als ein Array von sechs CDialog, was Sie in der zweiten zuzuteilen versuchen.

+0

Wenn ich die Nummer zur Laufzeit anpassen möchte :(6 -> 10), wie mache ich das dann? thx – jdl

+0

Verwenden Sie 'std :: vector's oder andere STL-Container. – mfontanini

1

Diese decls sind sehr unterschiedlich: Die CDialog *m_pages[6]; ein Array von 6 Zeigern auf CDialog ist, während m_pages = new CDialog[6]; es eine Reihe von 6 CDialog ist.

die zweite Erklärung zu verwenden, ich glaube, Sie so etwas wie

#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; 
} 

Dieser Code Ausgabe als

erwartet tun konnte
1 2 

Auf jeden Fall, diese zu gehen nicht der übliche Weg ist ...

Verwandte Themen