본문 바로가기
C,C++/Error & Warning

[C++] 함수 템플릿 특수화 관련 링크 에러 | LNK1169, LNK2005

by woohyeon 2020. 3. 2.
반응형

함수 템플릿 특수화하는데 컴파일은 정상적으로 되는데 링크 과정에서 계속 다음과 같은 에러가 발생

error LNK2005: ~~~ already defined in ~.obj

fatal error LNK1169: one or more multiply defined symbols found




찾아보니 컴파일 후 만들어진 파일들로 linking 과정에서 하나로 합치려 할 때 중복되는 정의가 있을 때 발생한다고 함.
내 코드에선 다음과 같이 특수화 한 함수의 선언과 정의가 분리되지 않아서 발생하는 에러였다.

// Foo.h

template <typename T>
T Foo<T>::Func()
{
  ...
}

template <>
float Foo<float>::Func()
{
  ...
}




위 코드의 선언과 정의를 아래와 같이 헤더와 cpp파일로 분리해서 작성해야 함.
(특수화가 아닌 경우는 선언과 정의를 같은 파일에 작성해야 하는 거 아시죠?)

// Foo.h

template <>
T Foo<T>::Func()
{
  ...
}

template <>
float Foo<float>::Func();


// Foo.cpp

template <>
float Foo<float>::Func()
{
  ...
}

 

https://ko.programqa.com/question/53271119/




댓글