C,C++/Error & Warning
[C++] 함수 템플릿 특수화 관련 링크 에러 | LNK1169, LNK2005
woohyeon
2020. 3. 2. 22:07
반응형
함수 템플릿 특수화하는데 컴파일은 정상적으로 되는데 링크 과정에서 계속 다음과 같은 에러가 발생
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()
{
...
}