2013-07-30 2 views
0

Я пытаюсь инициализировать массив с именем ARRAY внутри конструктора класса с именем CLASS_A, и этот массив должен быть доступен вложенным классом CLASS_B. Я думал о том, чтобы сделать массив шаблоном, но это было тогда, когда все стало немного нечетким, как идти о синтаксисе.Неопределенная ссылка на ... в вложенном классе, пытающемся объявить массив?

Я почти уверен, что объявляя ARRAY статическим является частью решения и, возможно, сделать тип const int шаблон как A так, то шаблон будет выглядеть template <class A, const int D> и декларация A ARRAY[SIZE];. В любом случае, я сначала получил эту ошибку, компилируя код ниже, а затем сделал некоторые изменения и получил другую ошибку.

Это ошибка линкера, кстати

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'| 

редактировать дубликат кода.

+0

Читать ответ и сравнить его с сайтом. Я смею компилировать свой код, зная все в вашей ссылке. Это не имеет никакого отношения к этому. – pandoragami

+0

Это имеет все, что связано с этим. Вам нужно было определить статический элемент данных. – juanchopanza

ответ

2

Вы только объявили ARRAY в CLASS_A, вам нужно определить его:

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

BTW, ваше поле SIZE является излишним, вам не нужно это, например:

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

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

Без знания 'template int CLASS_A :: ARRAY [N] = {};' Я бы никогда не скомпилировал это, спасибо! – pandoragami

+0

в основном, когда вы пишете 'static type member;' в классе, это объявление типа, а не определение. :) Рад, что это помогло! – billz

 Смежные вопросы

  • Нет связанных вопросов^_^