1>------ 빌드 시작: 프로젝트: AI, 구성: Debug Win32 ------

1>  AI.cpp

1>c:\users\admin\documents\visual studio 2012\projects\ai\ai\ai.cpp(64): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1>          c:\program files\microsoft visual studio 11.0\vc\include\stdio.h(218) : 'fopen' 선언을 참조하십시오.

1>c:\users\admin\documents\visual studio 2012\projects\ai\ai\ai.cpp(70): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1>          c:\program files\microsoft visual studio 11.0\vc\include\stdio.h(237) : 'fscanf' 선언을 참조하십시오.



1>c:\program files\microsoft visual studio 11.0\vc\include\xstddef(180): error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : 'const std::_Tree<_Traits> &'의 템플릿 인수를 'const node'에서 추론할 수 없습니다.

1>          c:\program files\microsoft visual studio 11.0\vc\include\xtree(2245) : 'std::operator <' 선언을 참조하십시오.

1>          c:\program files\microsoft visual studio 11.0\vc\include\xstddef(179) : 클래스 템플릿 멤버 함수 'bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const'을(를) 컴파일하고 있습니다.

1>          with

1>          [

1>              _Ty=node

1>          ]

1>          c:\program files\microsoft visual studio 11.0\vc\include\xutility(559) : 컴파일 중인 함수 템플릿 인스턴스화 'bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const'에 대한 참조를 확인하십시오.

1>          with

1>          [

1>              _Ty=node

1>          ]

1>          c:\program files\microsoft visual studio 11.0\vc\include\type_traits(743) : 컴파일 중인 클래스 템플릿 인스턴스화 'std::less<_Ty>'에 대한 참조를 확인하십시오.

1>          with

1>          [

1>              _Ty=node

1>          ]

1>          c:\program files\microsoft visual studio 11.0\vc\include\xtree(1028) : 컴파일 중인 클래스 템플릿 인스턴스화 'std::is_empty<_Ty>'에 대한 참조를 확인하십시오.

1>          with

1>          [

1>              _Ty=std::less<node>

1>          ]

1>          c:\program files\microsoft visual studio 11.0\vc\include\set(44) : 컴파일 중인 클래스 템플릿 인스턴스화 'std::_Tree<_Traits>'에 대한 참조를 확인하십시오.

1>          with

1>          [

1>              _Traits=std::_Tset_traits<node,std::less<node>,std::allocator<node>,false>

1>          ]

1>          c:\users\admin\documents\visual studio 2012\projects\ai\ai\ai.cpp(126) : 컴파일 중인 클래스 템플릿 인스턴스화 'std::set<_Kty>'에 대한 참조를 확인하십시오.

1>          with

1>          [

1>              _Kty=node

1>          ]

1>c:\program files\microsoft visual studio 11.0\vc\include\xstddef(180): error C2784: 'bool std::operator <(const std::queue<_Ty,_Container> &,const std::queue<_Ty,_Container> &)' : 'const std::queue<_Ty,_Container> &'의 템플릿 인수를 'const node'에서 추론할 수 없습니다.

1>          c:\program files\microsoft visual studio 11.0\vc\include\queue(204) : 'std::operator <' 선언을 참조하십시오.

1>c:\program files\microsoft visual studio 11.0\vc\include\xstddef(180): error C2784: 'bool std::operator <(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : 'const std::vector<_Ty,_Alloc> &'의 템플릿 인수를 'const node'에서 추론할 수 없습니다.

1>          c:\program files\microsoft visual studio 11.0\vc\include\vector(1726) : 'std::operator <' 선언을 참조하십시오.

1>c:\program files\microsoft visual studio 11.0\vc\include\xstddef(180): error C2784: 'bool std::operator <(const std::deque<_Ty,_Alloc> &,const std::deque<_Ty,_Alloc> &)' : 'const std::deque<_Ty,_Alloc> &'의 템플릿 인수를 'const node'에서 추론할 수 없습니다.

1>          c:\program files\microsoft visual studio 11.0\vc\include\deque(1929) : 'std::operator <' 선언을 참조하십시오.

1>c:\program files\microsoft visual studio 11.0\vc\include\xstddef(180): error C2784: 'bool std::operator <(const std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)' : 'const std::move_iterator<_RanIt> &'의 템플릿 인수를 'const node'에서 추론할 수 없습니다.

1>          c:\program files\microsoft visual studio 11.0\vc\include\xutility(1983) : 'std::operator <' 선언을 참조하십시오.

1>c:\program files\microsoft visual studio 11.0\vc\include\xstddef(180): error C2784: 'bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : 'const std::reverse_iterator<_RanIt> &'의 템플릿 인수를 'const node'에서 추론할 수 없습니다.

1>          c:\program files\microsoft visual studio 11.0\vc\include\xutility(1259) : 'std::operator <' 선언을 참조하십시오.

1>c:\program files\microsoft visual studio 11.0\vc\include\xstddef(180): error C2784: 'bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : 'const std::_Revranit<_RanIt,_Base> &'의 템플릿 인수를 'const node'에서 추론할 수 없습니다.

1>          c:\program files\microsoft visual studio 11.0\vc\include\xutility(1075) : 'std::operator <' 선언을 참조하십시오.

1>c:\program files\microsoft visual studio 11.0\vc\include\xstddef(180): error C2784: 'bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)' : 'const std::pair<_Ty1,_Ty2> &'의 템플릿 인수를 'const node'에서 추론할 수 없습니다.

1>          c:\program files\microsoft visual studio 11.0\vc\include\utility(232) : 'std::operator <' 선언을 참조하십시오.

1>c:\program files\microsoft visual studio 11.0\vc\include\xstddef(180): error C2676: 이항 '<' : 'const node'이(가) 이 연산자를 정의하지 않거나 미리 정의된 연산자에 허용되는 형식으로의 변환을 정의하지 않습니다.



typedef class node{
public:
	node *parent;
	int arr[10];
	int evaluate;
 
	// postcondition : evaluate has been changed
	int evaluateNode();
}node;

std::set<node>를 사용해서 이런 저런 프로그래밍을 하고 있었다.

이런 에러가 떴다.... 무슨 에러인고 하니 '<' 연산자가 없다고 한다. (처음엔 이것때문인줄 몰랐지)

처음에는 iterator부분에서 에러가 나길래 뭔가 뭔가 하고 열심히 찼아봤지만

아무런 소득을 얻을 수 없었다..


에러 결과를 찾은 곳은 바로 

open.insert(open.(),top); 

open 이라고 선언된 set에 , top이라는 node를 추가해주는 부분이었는데

이 부분이 있으면 에러가 났다. 왜그럴까 하고 생각해 봤는데 힌트는 '<'operator const node...

대체 < 연산자를 사용한적이 없는데...






해결방법은

class에 < operator를 const로 추가해주는 것이었다.

typedef class node{
public:
	node *parent;
	int arr[10];
	int evaluate;
 
	// postcondition : evaluate has been changed
	int evaluateNode();
	bool operator<(const node &i) const {
		return evaluate < i.evaluate;
	}
}node;

insert 내부에서 open.end()인지 아닌지 확인하는 부분에서 '<' 연산자를 사용하는 것 같았다.

따라서 int형으로 set을 사용할 때와는 다르게, < 연산자를 아무렇게나 재정의 해둔것 ㅠㅠ




'프로그래밍 > C/C++' 카테고리의 다른 글

[l4d2_plugins] Notepad++환경설정  (0) 2015.04.05
[Linux] Vim search & replace  (0) 2013.11.21
TCHAR, Unicode 함수  (0) 2013.04.10
[펌]문자열 함수, Ansi, Unicode, TCHAR  (0) 2013.03.05
__int64 / long long int  (1) 2013.02.27
by 개발자가 되자! 2013. 10. 13. 16:00