2013-06-15 2 views
0

특수 클래스 멤버 함수를 사용하려고합니다. 하나의 게시물에서 다음 솔루션을 발견했지만 나와 함께 작동하지 않습니다. 솔루션을 빌드 할 때 다음 오류가 나타납니다. - TestClass.obj : LNK2005 오류 및 치명적인 오류 LNK1169. 내 코드에 어떤 문제가 있습니까? 명시 적으로 전문특수 클래스 멤버 함수

template <class T1, class T2> 
class TestClass 
{ 
    private: 
    VD cdata; 
    public: 
    TestClass(void){}; 
    TestClass(VD & edata); 
    T1 fun1(const T2 ex); 
    ~TestClass(void); 
}; 

    template <class T1, class T2> 
    T1 TestClass<T1, T2>::fun1(const T2 x) 
    { 
    T1 v1 = 100.0*pow(x[1] - x[0]*x[0],2) + pow(1 - x[0],2); 
    return v1; 
    } 


template <> 
double TestClass<double, column_vector>::fun1(const column_vector x) 
{ 
    double v1 = 100.0*pow(x(1) - x(0)*x(0),2) + pow(1 - x(0),2); 
    return v1; 
} 
+1

.cpp 파일에 넣고 있습니까? –

+0

.h 파일에 없음 –

+0

죄송합니다. 문제가 해결되었지만 프로젝트에서 빈 .cpp 파일을 제거하지 않았습니다. Andy Prowl에게 제안 해 주셔서 감사합니다. –

답변

1

은 (즉, 완전히 전문) 템플릿 기능은 ODR의 목적을 위해 일반 기능입니다. 이이

template <> 
double TestClass<double, column_vector>::fun1(const column_vector x); 

을 정의하지 않고 당신이 헤더 파일에 전문화를 선언 해야 함을 의미하고 어떤 .cpp 파일 당신은 헤더 파일에 전체 정의를 넣어

template <> 
double TestClass<double, column_vector>::fun1(const column_vector x) 
{ 
    double v1 = 100.0*pow(x(1) - x(0)*x(0),2) + pow(1 - x(0),2); 
    return v1; 
} 

에서 그것을 정의, 다중 정의 오류 (LNK1169)가 발생했습니다.

LNK2005는 더 많은 정보를 제공해야합니다. LNK2005를 일으킬 수있는 사람이 무엇인지 게시 한 내용이 명확하지 않습니다. LNK2005는 어떤 기능을 언급합니까?

관련 문제