2013-07-30 4 views
0

CLASS_A 클래스의 생성자 안에 ARRAY 배열을 초기화하려고하는데이 배열은 중첩 클래스 CLASS_B에서 액세스 할 수 있어야합니다. 배열을 템플릿으로 만들려고 생각했지만 문법에 관해서는 약간 퍼지기 시작했습니다.정의되지 않은 참조 ... 배열을 선언하려는 중첩 클래스에서?

나는 배열 정적을 선언하면 솔루션의 일부임을 거의 확실 어쩌면 유형 const intA 같은 템플릿 그럼 템플릿 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

당신은 CLASS_AARRAY를 선언, 당신은 그것을 정의해야

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

, 당신 SIZE 필드가 중복, 당신은 예를 들어, 필요하지 않습니다

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

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

'템플릿을 모르는 중 int CLASS_A :: ARRAY [N] = {};'나는 이것을 컴파일하지 못했습니다. 감사합니다! – pandoragami

+0

기본적으로 클래스에'static type member;'라고 쓰면 정의가 아닌 타입 선언입니다. :) 다행스럽게 도와 줬어! – billz