2012-06-17 2 views
0

У меня есть CPP файл содержит это включают:Почему это имеет значение, если #include находятся в файле .h или в .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 он работает отлично, как приходит

+10

Помещение с использованием пространства имен std; в файле заголовка не должно быть сделано. Он побеждает, используя пространство имен. – Superman

+0

Если вы помещаете '# include' в файл cpp, 'use namespace std ;' вещь появляется перед' # include '. Я не знаю, вызвало ли это это, но это может иметь значение. –

+0

Любой cpp, включая этот заголовок, будет иметь большую работу, которую нужно выполнить при компиляции после изменения. Лучше поместить то, что вам нужно в каждом отдельном файле. – chris

ответ

0

Try включая Ws2tcpip.h и посмотреть, если это решит проблему. Это то, что MSDN должен сказать об этом (см раздел требований)

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

Кроме того, позвольте мне сказать, что это кажется ужасно много файлов заголовков включены и некоторые из них не должны быть согласованы, если вы действительно не знаете что ты делаешь. Есть довольно много заголовков C++ (iostream (который включен в два раза кстати), cstdio, cstdlib, алгоритм, список, строка, ctime ...), смешанный с заголовками C (stdio.h, stdlib.h string.h). Может быть, пришло время для какой-то поздней весенней уборки там :)

+0

Это звучит как Windows –

1

Не знаете, как исправить вашу проблему, но, по соглашению, вы никогда не должны включать в заголовочный файл, потому что однажды вы можете написать код, нуждающийся в вашем файле заголовка, но не все включает.

Смежные вопросы