In file included from socket.h:15,
from dbserver.h:5,
from test.cpp:1:
/usr/include/netinet/in.h:804: parse error before `.'
这些都是涉及到in.h这个文件的,求助,这个问题应该如何解决。
ps:在linux系统下,编译没有问题。
9 个解决方案
#1
是不是你编译器支持的C语言标准不一样啊,检查编译器的版本吧
#2
sys/socket.h 怎么会include netinet/in.h呢
难道socket.h不是系统的头文件?
难道socket.h不是系统的头文件?
#3
socket.h是自己写的文件,不是系统的。
#4
怎么判断是不是标准一致啊?菜鸟求详解。
#5
就是检查g++的版本啊,linux里面是类似g++ -v 查看啊,你看看AIX系统里的版本是不是和linux里面不一样,有可能是编译器的问题哦
#6
不要这样子吧。
Unix系统有一个sys/socket.h的头文件,最好还是改个名字吧。
要不把你自己的socket.h贴一下吧。
#7
#ifndef __SOCKET_H__
#define __SOCKET_H__
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#ifdef WIN32
#include <winsock2.h>
#include "thread.h"
#pragma comment(lib, "ws2_32.lib")
#else
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <unistd.h>
#include<sys/ioctl.h>
#include <errno.h>
typedef unsigned int SOCKET;
#endif
enum Type {TCP = SOCK_STREAM, UDP = SOCK_DGRAM};
typedef struct sockaddr SOCKADDR;
typedef struct sockaddr_in SOCKADDR_IN;
#define SOCK_CLOSE "DD9B2ADDDEEF46AA8460ED357E47DF84"
//socket运行环境单件类
class CSocketEnv
{
public:
#ifdef WIN32
WSADATA *g_pWsaData; //socket运行环境
#endif
CSocketEnv();
~CSocketEnv();
static CSocketEnv* Instance();
static int Uninstance();
private:
static CSocketEnv* _this;
};
//socket 公用通信类
class CMySocket
{
public:
CMySocket();
virtual ~CMySocket();
SOCKET Create(int nType=TCP);
int GetHostName(char *hostname);
int GetHostIp(char *hostip,int nIndex=0);
int GetRemoteIp(struct in_addr addr, char *hostip);
int Connect(SOCKET skt,const char *ip, int port);
int Close(SOCKET skt);
int Bind(SOCKET skt,int port);
int Listen(SOCKET skt,int backlog = 5);
SOCKET Accept(SOCKET skt,SOCKADDR_IN *addr);
int Send(SOCKET skt,const char* buf, int len = -1, int flags = 0);
int Recv(SOCKET skt, char* buf, int len, int flags = 0);
int Sendn(SOCKET skt,const char *buf , int nLen, int flags = 0);
int Recvn(SOCKET skt,char *buf, int nLen, int flags = 0);
//UDP
int SendTo(SOCKET skt,char *ip, int port,const char* buf, int len = -1, int flags = 0);
int RecvFrom( SOCKET skt,char *buf, int len, int flags = 0);
int IoctlSocket(SOCKET skt,int nCmd);
int SetSockOpt(SOCKET skt,int nLevel,int nOptName,const char* sOptVal,int nOptLen);
int GetLastError();
int GetErrCodeMsg(char *sErrMsg = NULL);
};
//客户端类
class CSocketClient : public CMySocket
{
public:
SOCKET m_socketId;
CSocketClient();
~CSocketClient();
int Connect(const char *ip, int port);
int Close();
int Send(const char* buf, int len = -1, int flags = 0);
int Recv(char* buf, int len, int flags = 0);
int Sendn(const char* buf, int len = -1, int flags = 0);
int Recvn(char* buf, int len, int flags = 0);
int SendTo(char *ip, int port,const char* buf, int len = -1, int flags = 0);
int RecvFrom(char *buf, int len, int flags = 0);
int ReConnect();
int IoctlSocket(int nCmd);
private:
char m_sRemoteIp[16];
int m_nPort;
};
#endif
#8
真没有看出什么大的问题,楼主试试这样行不行
#include <netinet/in.h>
把放到
的后面
#include <sys/socket.h>
我一般是用下面的顺序
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
把放到
的后面
#include <sys/socket.h>
我一般是用下面的顺序
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#9
真没有看出什么大的问题,楼主试试这样行不行
#include <netinet/in.h>
把放到
#include <sys/socket.h>
的后面
我一般是用下面的顺序
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
把放到
#include <sys/socket.h>
的后面
我一般是用下面的顺序
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#1
是不是你编译器支持的C语言标准不一样啊,检查编译器的版本吧
#2
sys/socket.h 怎么会include netinet/in.h呢
难道socket.h不是系统的头文件?
难道socket.h不是系统的头文件?
#3
socket.h是自己写的文件,不是系统的。
#4
怎么判断是不是标准一致啊?菜鸟求详解。
#5
就是检查g++的版本啊,linux里面是类似g++ -v 查看啊,你看看AIX系统里的版本是不是和linux里面不一样,有可能是编译器的问题哦
#6
不要这样子吧。
Unix系统有一个sys/socket.h的头文件,最好还是改个名字吧。
要不把你自己的socket.h贴一下吧。
#7
#ifndef __SOCKET_H__
#define __SOCKET_H__
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#ifdef WIN32
#include <winsock2.h>
#include "thread.h"
#pragma comment(lib, "ws2_32.lib")
#else
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <unistd.h>
#include<sys/ioctl.h>
#include <errno.h>
typedef unsigned int SOCKET;
#endif
enum Type {TCP = SOCK_STREAM, UDP = SOCK_DGRAM};
typedef struct sockaddr SOCKADDR;
typedef struct sockaddr_in SOCKADDR_IN;
#define SOCK_CLOSE "DD9B2ADDDEEF46AA8460ED357E47DF84"
//socket运行环境单件类
class CSocketEnv
{
public:
#ifdef WIN32
WSADATA *g_pWsaData; //socket运行环境
#endif
CSocketEnv();
~CSocketEnv();
static CSocketEnv* Instance();
static int Uninstance();
private:
static CSocketEnv* _this;
};
//socket 公用通信类
class CMySocket
{
public:
CMySocket();
virtual ~CMySocket();
SOCKET Create(int nType=TCP);
int GetHostName(char *hostname);
int GetHostIp(char *hostip,int nIndex=0);
int GetRemoteIp(struct in_addr addr, char *hostip);
int Connect(SOCKET skt,const char *ip, int port);
int Close(SOCKET skt);
int Bind(SOCKET skt,int port);
int Listen(SOCKET skt,int backlog = 5);
SOCKET Accept(SOCKET skt,SOCKADDR_IN *addr);
int Send(SOCKET skt,const char* buf, int len = -1, int flags = 0);
int Recv(SOCKET skt, char* buf, int len, int flags = 0);
int Sendn(SOCKET skt,const char *buf , int nLen, int flags = 0);
int Recvn(SOCKET skt,char *buf, int nLen, int flags = 0);
//UDP
int SendTo(SOCKET skt,char *ip, int port,const char* buf, int len = -1, int flags = 0);
int RecvFrom( SOCKET skt,char *buf, int len, int flags = 0);
int IoctlSocket(SOCKET skt,int nCmd);
int SetSockOpt(SOCKET skt,int nLevel,int nOptName,const char* sOptVal,int nOptLen);
int GetLastError();
int GetErrCodeMsg(char *sErrMsg = NULL);
};
//客户端类
class CSocketClient : public CMySocket
{
public:
SOCKET m_socketId;
CSocketClient();
~CSocketClient();
int Connect(const char *ip, int port);
int Close();
int Send(const char* buf, int len = -1, int flags = 0);
int Recv(char* buf, int len, int flags = 0);
int Sendn(const char* buf, int len = -1, int flags = 0);
int Recvn(char* buf, int len, int flags = 0);
int SendTo(char *ip, int port,const char* buf, int len = -1, int flags = 0);
int RecvFrom(char *buf, int len, int flags = 0);
int ReConnect();
int IoctlSocket(int nCmd);
private:
char m_sRemoteIp[16];
int m_nPort;
};
#endif
#8
真没有看出什么大的问题,楼主试试这样行不行
#include <netinet/in.h>
把放到
的后面
#include <sys/socket.h>
我一般是用下面的顺序
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
把放到
的后面
#include <sys/socket.h>
我一般是用下面的顺序
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#9
真没有看出什么大的问题,楼主试试这样行不行
#include <netinet/in.h>
把放到
#include <sys/socket.h>
的后面
我一般是用下面的顺序
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
把放到
#include <sys/socket.h>
的后面
我一般是用下面的顺序
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>