Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Linux中,但在Windows中,函数参数(C+;+;)出现未声明的标识符错误_C++_Linux_Windows_Clang_Cross Platform - Fatal编程技术网

C++ 在Linux中,但在Windows中,函数参数(C+;+;)出现未声明的标识符错误

C++ 在Linux中,但在Windows中,函数参数(C+;+;)出现未声明的标识符错误,c++,linux,windows,clang,cross-platform,C++,Linux,Windows,Clang,Cross Platform,我写了以下代码: #include <iostream> #include <limits> #include <string> #ifdef _WIN32 #include "WinSock2.h" #include "WS2tcpip.h" #pragma comment(lib,"ws2_32.lib") #elif __linux__ #include <sys/so

我写了以下代码:

#include <iostream>
#include <limits>
#include <string>
#ifdef _WIN32
  #include "WinSock2.h"
  #include "WS2tcpip.h"

  #pragma comment(lib,"ws2_32.lib")

#elif __linux__
  #include <sys/socket.h>
  #include <arpa/inet.h>
  #define SOCKET socket
#else
  #error Compiler cannot interpret platform. Please compile this program in Windows 32/64-bit or Linux!
#endif

//...some codes here for initalization for _WIN32

int socket_create(SOCKET &socketHandler)
{
  socketHandler = socket(AF_INET, SOCK_STREAM, 0);

  if (socketHandler == INVALID_SOCKET)
  {
    #ifdef _WIN32
      return (WSAGetLastError());
    #else
      return -1;
    #endif
  }
  else
  {
    return 0;
  }
}

//...some codes for other functions
//...main function

问:为什么它在Linux中有所不同?我在申报单上遗漏了什么吗?如果是这样的话,同一版本的clang在Windows中如何能够很好地编译它,而在Linux中却被直接拒绝? TBH,这是我第一次在Linux上编译东西,所以我不知道我是否错过了我应该在Linux中做的事情,而不是在C++中的Windows中。谢谢。

Linux中返回的是
int
,而不是
socket
socket

您在Linux模式下使用的是
#define SOCKET SOCKET
,它将把函数名放在需要类型名的地方,如下所示:

int hoge(){ return 0; }

int fuga(hoge& x) { // error
    return 0;
}
Windows中不会产生此错误,因为由于
#ifdef
指令,Windows中没有使用有问题的行
#define SOCKET

总之,行
#define SOCKET
应该是
typedef int SOCKET

Linux中返回的是
int
,而不是
socket
socket

您在Linux模式下使用的是
#define SOCKET SOCKET
,它将把函数名放在需要类型名的地方,如下所示:

int hoge(){ return 0; }

int fuga(hoge& x) { // error
    return 0;
}
Windows中不会产生此错误,因为由于
#ifdef
指令,Windows中没有使用有问题的行
#define SOCKET


总之,行
#define SOCKET
应该是
typedef int SOCKET

啊,插座的奇迹。我一定是在读MSDN的时候错过了。非常感谢。另一方面,谁知道计算机中存在着令人痛苦的相似但不太兼容的插座,就像在电气世界中一样(提示:德国Schuko插座vs法国E型插座)啊,插座的奇迹。我一定是在读MSDN的时候错过了。非常感谢。另一方面,谁知道计算机中存在着和电气世界相似但不太兼容的插座(提示:德国Schuko插座vs法国E型插座)
int hoge(){ return 0; }

int fuga(hoge& x) { // error
    return 0;
}