강아지를 좋아하는 컴공생

[C2893] 컴파일러가 함수 템플릿을 특수화 하지 못했습니다. 본문

c++/에러

[C2893] 컴파일러가 함수 템플릿을 특수화 하지 못했습니다.

정인하이 2020. 6. 5. 10:56

list 컨테이너 구조인 li2를 가지고 sort()메서드를 이용하려고 했더니 오류가 났다.

에러메세지는 다음과 같았다.

 

함수 템플릿 'unknown type std::less<void>operator ()(_Ty1 && _Ty2 &&) noexcept(<expr>) const'을(를) 특수화하지 못했습니다.

 

문제 원인

원인은 다음과 같다. 내가 만든 타입인 CMyPoint로 li2를 만들었다.

CMyPoint 객체끼리 sort()를 하려면 어떠한 기준을 갖고 크다작다를 비교해야하는데 내가 CMyPoint 클래스에서

operator<의 오버로딩을 해주지 않아서 비교하는 것에서 컴파일러가 혼란을 빚은 것이다.

C2893 오류

 

해결 방법

CMyPoint 클래스로 갔더니 operator> (크다를 비교할 수 있는 연산자) 만 오버로딩을 해놓았더라..

operator< (작다를 비교할 수 있는 연산자) 오버로딩을 추가해주면 된다!

 

 

operator< 메서드도 오버로딩을 추가했다.

 

 

나름의 기준을 가지고 객체의 크다 작다를 비교하면 된다.

나는 CMyPoint가 가지고있는 멤버변수인 x값을 가지고 크다 작다를 비교했다.

 

그 후 다시 컴파일을 해보니 잘 된다!

sort()성공