Morgan
Morgan

Reputation: 163

Socket bind() error: invalid operands to binary expression

Code:

 if (bind(sockfd, (sockaddr *) &addr, sizeof(addr)) == -1) {

Error:

fs_server.cpp:264:56: error: invalid operands to binary expression ('__bind<int &, sockaddr *,
      unsigned long>' and 'int')
    if (bind(sockfd, (sockaddr *) &addr, sizeof(addr)) == -1) {

This was working when I run this code using C++11, and also works when I run this code using C++ 17 on Linux. It does not work when I run it on Mac OS using C++17. To me, it looks like the error indicates that the comparison is between the function itself and -1. I'm not sure why this would happen. Am I interpreting something incorrectly?

Upvotes: 7

Views: 2443

Answers (1)

Remy Lebeau
Remy Lebeau

Reputation: 595412

Your code is trying to call the C++ std::bind() function, not the socket bind() function. This is likely due to a using namespace std; statement in your code.

To ensure the correct function is being called, you can either get rid of the using statement, or else qualify the call as using the function from the global namespace:

if (::bind(sockfd, (sockaddr *) &addr, sizeof(addr)) == -1) {

Upvotes: 15

Related Questions