2016-12-18 2 views
-2

J'essaye de créer une classe (foo) avec un tableau de membre privé. Cette classe sera utilisée comme membre privé d'une autre classe (foo2) dans le constructeur dont le tableau sera initialisé.C++ initialize member array

example.h:

class foo{ 
private: 
    int* ary; 
public: 
    foo(int*); 
    ~foo(); 
} 

example.cpp:

foo::foo(int* b){ 
ary = b; 
} 

useOfExample.h

class foo2{ 
private: 
    foo my_foo; 
public: 
    foo2(); 
    ~foo2(); 
} 

useOfExample.cpp

foo2::foo2() : myfoo({2,3}){} 

Je suis un peu un noob en C++ et je me rends compte que ce que je demande n'est peut-être pas vraiment clair, donc j'ai besoin de foo2 pour avoir un membre foo dont le tableau sera défini sur [2,3].

+1

Ce n'est pas un tableau, c'est un pointeur vers un entier (je sais que vous pouvez les traiter presque pareil). Pourquoi ferais-tu quelque chose d'aussi horrible avec des pointeurs en C++ quand tu pourrais utiliser une classe STL? Connaissez-vous la portée de ce {2,3} 'sans vérifier? Peut-il sortir du cadre alors que 'myfoo' pointe toujours dessus? – John3136

+1

Les tableaux ne sont pas des pointeurs, les pointeurs ne sont pas des tableaux et le tableau dynamique standard en C++ est 'std :: vector'. Vous devriez l'utiliser. Si vous ne pouvez pas, vous devez revoir votre matériel de cours (ou quoi que ce soit que vous apprenez) pour comprendre ce que vous êtes censé faire ici. –

+0

'int * ary;' => 'int ary [2];' ou 'std :: array ary;'. Ensuite, ce sera un tableau, pas un pointeur non initialisé. –

Répondre

0

Jetez un oeil à: Static array vs. dynamic array in C++

Vous ne pouvez pas utiliser la syntaxe {...} pour initialiser un tableau dynamique; vous devez le remplir manuellement.

+0

merci pour la réponse, je pensais que ce pourrait être possible parce que je croyais que ce faisant, je spécifiais quelque chose, comme lors de l'initialisation d'un entier, ne réalisant pas que le tableau continue à être dynamique après . – loogikos