반응형
함수 템플릿 특수화하는데 컴파일은 정상적으로 되는데 링크 과정에서 계속 다음과 같은 에러가 발생
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()
{
...
}
'C,C++ > Error & Warning' 카테고리의 다른 글
스레드 함수의 인자로 shared_ptr을 전달할 때 주의할 점 | _Incref 에러 (0) | 2020.11.08 |
---|---|
LNK 1104: cannot open file ~~~ for writing (0) | 2020.09.07 |
[C++] LNK2001, LNK1120 링크 오류 (static 관련) (0) | 2020.02.04 |
[C++] C2572 컴파일러 오류. redefinition of default argument (0) | 2020.01.11 |
[C++] LNK2019, LNK1120 클래스 템플릿 사용 시 링크 오류 (0) | 2019.11.28 |
댓글