2010-06-14 4 views
1

:C++ 여러 정의 오류

내가 다음 코드 는 헤더 파일에 넣어 경우 여러 정의 오류를 해결하는 방법에 대해 궁금 여러 포함 서로 다른 .cc 파일로 번에 연결하여 함께 연결 :

template <typename T> 
class C { 
    static const int K; 
    static ostream& print(ostream& os, const T& t) { return os << t;} 
}; 

// general case 
template <typename T> 
const int C<T>::K = 1; 

// specialization 
template <> 
const int C<int>::K = 2; 

답변

2

전문화를 .cc f iles. 템플릿 버전은 헤더에 그대로 둡니다.

+0

이것은 어떻게 작동할까요? 여러 .cc 파일의 전문화가 필요한 경우 어떻게해야합니까? 그런 다음 여러 개의 .cc 파일을 동일한 정의로 연결하면 오류가 발생합니다. – user231536

+0

@ user231536 : 일반 클래스를 작성하면 하나의 .cc에만 메소드 정의를 제공하므로 링커에서는 나머지 .cc 파일에서 메소드 정의를 사용할 수 있습니다. 완전 전문화에 대해서도 동일하게 적용됩니다. 하나의 .cc 파일에서만 전문화 기능을 제공하므로 링커는 다른 .cc 파일에서이 파일을 사용할 수 있도록합니다. – Paul

0

플랫폼에 따라, 당신은 내가 생각할 수있는 유일한 것은 당신이 모든 유형 전에 에 대한 K 변수를 정의하고 있다는 점이다

0

일단 #ifdef와 나의 #pragma 같은 무언가가 그것을 둘러싸고 수 컴파일러는 <int> 전문화를 얻을 것입니다 때 어떤 전문화 등 변수 정의는 이미 이런 경우, 당신이 전문화를 이동할 수 있습니다, 그래서 ..

존재하는 것 C<int>::K-C<T>::K