2013-07-30 1 views
0

J'essaye d'initialiser un tableau appelé ARRAY dans le constructeur d'une classe appelée CLASS_A et ce tableau est censé être accessible par la classe imbriquée CLASS_B. J'ai pensé à faire du tableau un modèle mais c'était quand les choses commençaient à devenir floues sur la syntaxe.référence non définie à ... dans une classe imbriquée essayant de déclarer un tableau?

Je suis presque certain que la déclaration statique fait partie de MATRICE la solution et peut-être faire le type const int un modèle comme A donc alors le modèle ressemblerait template <class A, const int D> et la déclaration A ARRAY[SIZE];. Quoi qu'il en soit, j'ai d'abord eu cette erreur en compilant le code ci-dessous, puis j'ai fait quelques changements et j'ai eu une erreur différente.

Ceci est une erreur de liaison par la façon dont

nested_class_incomplete_type.cpp|16|undefined reference to `CLASS_A<3>::ARRAY'| 
nested_class_incomplete_type.cpp|28|undefined reference to `CLASS_A<3>::ARRAY'| 

modifier code en double.

+0

Lire la réponse et comparez-le au site. Je te mets au défi de compiler mon code en sachant tout dans ton lien. Cela n'a rien à voir avec ça. – pandoragami

+0

Ça a tout à voir avec ça. Vous deviez définir un membre de données statique. – juanchopanza

Répondre

2

Vous ne mentionnaient ARRAY à CLASS_A, vous devez définir:

template <const int D> 
int CLASS_A<D>::ARRAY[SIZE] = {}; 

BTW, votre champ de taille est redondant, vous ne avez pas besoin, par exemple:

template <size_t N> 
class CLASS_A 
{ 
public: 
    static int ARRAY[N]; 
    //..... 
}; 

template <size_t N> 
int CLASS_A<N>::ARRAY[N] = {}; 
+0

Sans savoir 'template int CLASS_A :: ARRAY [N] = {};' Je n'aurais jamais pu compiler ceci, merci! – pandoragami

+0

essentiellement lorsque vous écrivez «membre de type statique;» dans une classe, c'est la déclaration de type, pas la définition. :) Heureux que ça a aidé! – billz