Visual C++ 2010 - error C2825: '_Fty': '::'가 뒤에 나오면 클래스 또는 네임스페이스여야 합니다.

2015. 10. 21. 16:15IT-개발/STL 및 Boost

반응형

(펌. 원작 : http://rosagigantea.tistory.com/387)

 

error C2825: '_Fty': '::'가 뒤에 나오면 클래스 또는 네임스페이스여야 합니다.

이런식으로 뭔가 알지도 못하는 xxresult(28) 파일을 찾아봐염

 

에러가 떨어졌습니다.

 

아무리 이 파일 안을 봐도 뭔가 복잡한 코드라는것 밖에 알 수 없어서

이넘이 컴파일 하다 죽은 소스 부분을 살펴보다가 이런 부분이 나오더군요.

 

error C2678: 이항 '==' : 왼쪽 피연산자로 'std::tr1::_Bind_fty<_Fty,_Ret,_BindN>' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다.
1> with
1> [
1> _Fty=SOCKET,
1> _Ret=std::tr1::_Notforced,
1> _BindN=std::tr1::_Bind2<std::tr1::_Callable_obj<SOCKET,false>,sockaddr *,unsigned int>
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\exception(470): 'bool std::operator ==(const std::_Exception_ptr &,const std::_Exception_ptr &)'일 수 있습니다.
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\exception(475): 또는 'bool std::operator ==(std::_Null_type,const std::_Exception_ptr &)'
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\exception(481): 또는 'bool std::operator ==(const std::_Exception_ptr &,std::_Null_type)'
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\system_error(408): 또는 'bool std::operator ==(const std::error_code &,const std::error_condition &)'
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\system_error(416): 또는 'bool std::operator ==(const std::error_condition &,const std::error_code &)'
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\guiddef.h(192): 또는 'int operator ==(const GUID &,const GUID &)'
1> 인수 목록 '(std::tr1::_Bind_fty<_Fty,_Ret,_BindN>, int)'을(를) 일치시키는 동안
1> with
1> [
1> _Fty=SOCKET,
1> _Ret=std::tr1::_Notforced,
1> _BindN=std::tr1::_Bind2<std::tr1::_Callable_obj<SOCKET,false>,sockaddr *,unsigned int>
1> ]

 

 

이게 뭔말인고 하니

#include <Winsock2.h> 에서 정의된 bind 랑

#include <functional> 에서 정의된 bind가 같은 네임스페이스 상에 있어서 충돌하는거라 하네요..


(내가 추가...)

한마디로, socket에서 쓰는 bind() 함수와 STL에서 사용하는 std::bind() 충돌문제 인듯~ 합니다.

 

뭐 어쨋든.. 저걸 해결하기 위해서 stl이 아닌 bind를 쓰고 싶으면 bind -> ::bind로 바꿔주니 문제해결... ㅠㅠ.