Dork's port

invalid operands to binary expression (C++11) 본문

Develop

invalid operands to binary expression (C++11)

Dork94 2017. 9. 22. 12:36

예전에 프로그램 코딩을 하다 bind함수에서 에러가 난적이 있는데 에러 코드는 위와 같이 invalid operands to binary expression를 뱉어 내면서 컴파일이 되지 않았다.


분명 Kali Linux에서는 정상적으로 동작하던 코드인데 안드로이드에서 컴파일 하려고 하니 오류가 났는데 이때 c++11로 컴파일을 명시하였다.


이부분에서 오는 오류였는데, c++11으로 발전하면서 std에 bind함수가 추가 되어 bind함수가 std::bind함수로 인식하여 컴파일러에서 다른 함수로 받아들여 이런 오류가 발생 한 것이다.(using namespace std 사용 시)


때문에 bind함수 또는 사용하려는 기타 함수가 stl에서 지원하는 함수이고 c++11로 컴파일하고자 한다면 해당 함수 명을 ::<함수명> 또는 namespace부분을 삭제 해주면 정상적으로 컴파일 될 것 이다. 소스코드로 보면 아래와 같다.





#include <iostream>

using namespace std;

int main()
{
    bind(int __fd,const sockaddr *__addr,socklen_t __len);
    
    return 0;
}


위의 소스코드를 아래와 같이 수정해주면 정상적으로 동작한다.




#include <iostream>

//using namespace std;

int main()
{
    bind(int __fd,const sockaddr *__addr,socklen_t __len);
    
    return 0;
}

 또는 , 아래와 같이 바꿀 수 있다.

#include <iostream>

using namespace std;

int main()
{
    ::bind(int __fd,const sockaddr *__addr,socklen_t __len);
    
    return 0;
}



참고 : https://stackoverflow.com/questions/16180322/c-xcode-sockets-bind-error

Comments