공부/문제해결

LNK2019 오류 - template사용

_mwmw 2022. 10. 8. 02:13

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;
}