LNK2019:함수에서 참조되는 확인할 수 없는 외부 기호
LNK1120:n개의 확인할 수 없는 외부 참조입니다.
template 사용시 이런 에러를 볼 수 있다.
예를 들어 다음과 같이 코드를 작성한다면,.
// aaa.h
#include <iostream>
class A {
public:
A();
~A();
template<class T>
void print(T t);
};
// aaa.cpp
#include "aaa.h"
A::A() {};
A::~A() {};
template<class T>
void A::print(T t) {
std::cout << t << "\n";
}
// main.cpp
#include "aaa.h"
int main() {
A a;
a.print(3);
a.print(4.5f);
a.print("asdf");
return 0;
}
이런 에러를 볼 수 있다.
해결법 1
헤더파일 안에 정의까지 같이 한다.
#include <iostream>
class A {
public:
A(){};
~A(){};
// 선언과 정의를 같이
template<class T>
void print(T t){
std::cout << t << "\n";
}
};
해결법 2
main.cpp에서 aaa.h 대신 aaa.cpp를 include한다.
#include "aaa.cpp" // aaa.h 대신
int main() {
A a;
a.print(3);
a.print(4.5f);
a.print("asdf");
return 0;
}
'공부 > 문제해결' 카테고리의 다른 글
디스코드 실행 후 바로 꺼지는 문제 - StarPlayer (0) | 2022.09.03 |
---|---|
[UE4] SetTimer() 사용시 주의할 점? (0) | 2022.08.16 |
Visual Studio 디버깅이 느려지는 현상 (0) | 2022.08.13 |
LNK2001 오류 - 클래스 내 static 변수 (0) | 2022.05.27 |
C2259:추상클래스를 인스턴스화 할 수 없습니다 (0) | 2022.05.25 |