如果#include在.h文件或.cpp文件中,为什么重要?

时间:2012-06-17 13:34:54

标签: c++ xcode

我有一个cpp文件,其中包含以下内容:

#include "twitServer.h"

在twitServer.h中我有:

#ifndef twitServer_twitServer_h
#define twitServer_twitServer_h
#include <string>
#include <map>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <list>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <cstring>
#include <netdb.h>
#include <errno.h>
#include <sstream>
#include <algorithm>
#include <ctime>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "twitUser.h"

using namespace std;

void startServer(string port);

#endif

但是Xcode说这行:

if ((rv = getaddrinfo(NULL, port, &hints, &ai)) != 0) {
    fprintf(stderr, "selectserver: %s\n", gai_strerror(rv));
    exit(1);
}

getaddrinfo未定义......为什么?

如果包含在cpp文件中,它可以正常工作

2 个答案:

答案 0 :(得分:1)

不确定如何解决您的问题,但按照惯例,您不应该包含在头文件中,因为您可能会在某天编写代码,需要您的头文件,但不是所有的包含。

答案 1 :(得分:0)

尝试包含Ws2tcpip.h,看看是否能解决问题。这就是MSDN对它的评价(参见要求部分)

http://msdn.microsoft.com/en-us/library/windows/desktop/ms738520%28v=vs.85%29.aspx

另外,让我说这似乎包含了大量的头文件,除非你真的知道自己在做什么,否则不应该匹配一些。有很多C ++头文件(iostream(包括两次),cstdio,cstdlib,algorithm,list,string,ctime ...)与C头文件混合(stdio.h,stdlib.h string.h )。也许是时候在那里进行一些晚春清洁了:)