Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Конфликт time.h и winsock2.h


Автор: Tiarwe 6.2.2013, 11:37
Переписываю проект с windows под андроид и столкнулся с проблемой конфликта имён. А именно, компилятор ругается на timeval определенную в обоих файлах...
Цитата

d:\programs\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\winsock2.h|109|error: redefinition of 'struct timeval'|
..\..\..\Programs\Android\android-ndk-r8d\platforms\android-9\arch-arm\usr\include\linux\time.h|25|error: previous definition of 'struct timeval'|

Как побороть?

Автор: feodorv 6.2.2013, 12:28
Боюсь, только правкой хедеров. Например, правка в winsock2.h:
Код

#if !defined( STRUCT_TIMEVAL_DEFINED )
/*
 * Structure used in select() call, taken from the BSD file sys/time.h.
 */
struct timeval {
        long    tv_sec;         /* seconds */
        long    tv_usec;        /* and microseconds */
};
#endif


А затем:
Код

#include <time.h>
#define STRUCT_TIMEVAL_DEFINED
#include <winsock2.h>


Сами структуры-то хоть совпадают? Или различаются?

Добавлено через 3 минуты и 34 секунды
Может, namespace'ами удастся обойти  smile

Добавлено через 14 минут и 55 секунд
Кстати, в заголовке winsock2.h для mingw уже может присутствовать необходимое, посмотрите внимательно: 
Код

#ifndef _TIMEVAL_DEFINED
#define _TIMEVAL_DEFINED
struct timeval {
  long tv_sec;
  long tv_usec;
};
...
#endif /* _TIMEVAL_DEFINED */

Автор: borisbn 6.2.2013, 13:10
Я, честно говоря, не в курсе андроид-разработки и native в частности, но как путь к winsock2.h попал в includes NDK ?

Автор: Tiarwe 6.2.2013, 22:43
Разобрался. Забыл один из модулей (под WIN который) отключить...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)