2016-09-10 15 views
1

を返しません。ソケットは、次のように私のコードのスニペットが見えるint型

int descriptor = socket(AF_INET, SOCK_STREAM, 0); 
if(descriptor < 0){ 
    cerr << "Error establishing socket connection." << endl; 
    return -1; 
} 
int port = 3400; 
struct sockaddr_in address; 
char buffer[140]; 
address.sin_family = AF_INET; 
address.sin_addr.s_addr = htons(INADDR_ANY); 
address.sin_port = htons(port); 
int size = sizeof(address); 
if(bind(descriptor,(struct sockaddr*)&address,size) < 0){ 
    cerr << "Error binding socket." << endl; 
} 
cout << "Waiting for connection on " << INADDR_ANY << " on port " << port << ends; 

私はこれをコンパイルしようとするたびに、私は次のエラーを取得する:

error: invalid operands to binary expression 
('__bind<int &, sockaddr *, int &>' and 'int') 
if(bind(descriptor,(struct sockaddr*)&address,size) < 0){ 

誰が何を知っていますこれは意味することができますか? bind()は整数を返すと思われるので、私は考えました。私の輸入品は次のようになります:

#include <iostream>  
#include <string.h> 
#include <string>  
#include <sys/socket.h> 
#include <sys/types.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <netdb.h> 
#include <unistd.h> 
using namespace std; 

ありがとう!

答えて

11

using namespace std;とあまりにも多くのヘッダー封じ込めが組み合わさっている可能性が高いです - ここに何度も何度も何度も繰り返されてきた理由があります(SO not to use it)。これを実行すると、コンパイラはbindを見て、std::bind<functional>から、::bindではなくソケットとみなします。したがって、実際にこれらのヘッダーをすべて含め、宣言を使用して取り除く必要があるかどうかを確認するか、::bindedit:またはその両方)を使用するかどうかを検討してください。::を使用して、グローバル名前空間のAPI関数)

関連する問題