Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Непонятная ошибка при создании нового модуля


Автор: Bima 9.2.2007, 15:29
Создаю новый проект.
Кидаю на него компонент Indy: IdSNMP
Компилирую проект - все нормально.

Создаю новый модуль: File-New-Unit
Компилирую проект - все нормально.

линкую новй модуль с программой: File-Include Unit Hdr... (Alt-F11) - Unit1 - Ok
Компилирую проект - ВСВ выдает такие ошибки:

Код

  [C++ Error] winsock2.h(109): E2238 Multiple declaration for 'fd_set'
  [C++ Error] winsock.h(54): E2344 Earlier declaration of 'fd_set'
  [C++ Error] winsock2.h(112): E2146 Need an identifier to declare
  [C++ Error] winsock2.h(153): E2238 Multiple declaration for 'timeval'
  [C++ Error] winsock.h(97): E2344 Earlier declaration of 'timeval'
  [C++ Error] winsock2.h(209): E2238 Multiple declaration for 'hostent'
  [C++ Error] winsock.h(153): E2344 Earlier declaration of 'hostent'
  [C++ Error] winsock2.h(222): E2238 Multiple declaration for 'netent'
  [C++ Error] winsock.h(166): E2344 Earlier declaration of 'netent'
  [C++ Error] winsock2.h(229): E2238 Multiple declaration for 'servent'
  [C++ Error] winsock.h(173): E2344 Earlier declaration of 'servent'
  [C++ Error] winsock2.h(241): E2238 Multiple declaration for 'protoent'
  [C++ Error] winsock.h(185): E2344 Earlier declaration of 'protoent'
  [C++ Error] winsock2.h(327): E2238 Multiple declaration for 'in_addr'
  [C++ Error] winsock.h(269): E2344 Earlier declaration of 'in_addr'
  [C++ Error] winsock2.h(385): E2238 Multiple declaration for 'sockaddr_in'
  [C++ Error] winsock.h(319): E2344 Earlier declaration of 'sockaddr_in'
  [C++ Error] winsock2.h(395): E2238 Multiple declaration for 'WSAData'
  [C++ Error] winsock.h(329): E2344 Earlier declaration of 'WSAData'
  [C++ Error] winsock2.h(411): E2146 Need an identifier to declare
  [C++ Error] winsock2.h(546): E2238 Multiple declaration for 'sockaddr'
  [C++ Error] winsock.h(492): E2344 Earlier declaration of 'sockaddr'
  [C++ Error] winsock2.h(586): E2238 Multiple declaration for 'sockproto'
  [C++ Error] winsock.h(501): E2344 Earlier declaration of 'sockproto'
  [C++ Error] winsock2.h(625): E2238 Multiple declaration for 'linger'
  [C++ Error] winsock2.h(625): E2228 Too many error or warning messages


Indy 9.
Откуда такие ошибки, понять не могу smile
HELP!!!

Добавлено @ 15:34 
проверял на разных машинах, результат тот же smile

Автор: Bima 9.2.2007, 15:55
Попробовал тоже самое сделать на Delphi, все нормально компилируется, хотя Indy ставил с одного дистрибутива.

Автор: Rodman 9.2.2007, 15:57
попробуй сокет переподключить...

Автор: Vyacheslav 9.2.2007, 17:57
Ну повсей видимости, компилятор Вас просит определиться, что Вы будете использовать socket или socket2
Цитата

[C++ Error] winsock2.h(109): E2238 Multiple declaration for 'fd_set'
  [C++ Error] winsock.h(54): E2344 Earlier declaration of 'fd_set'
 


Добавлено @ 17:59 
Код

/* WINSOCK.H--definitions to be used with the WINSOCK.DLL
 * Copyright (c) Microsoft Corporation. All rights reserved.
 *
 * This header file corresponds to version 1.1 of the Windows Sockets specification.


Код

/* Winsock2.h -- definitions to be used with the WinSock 2 DLL and
 *               WinSock 2 applications.
 *
 * This header file corresponds to version 2.2.x of the WinSock API
 * specification.

Автор: Bima 9.2.2007, 19:37
Я библиотеку winsock2.h и winsock.h не подключал.
Как мне проверить, что какая то библиотека подключена???

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

Возможно, нет, я даже уверен, что Indy использует одну из этих библиотек, но как узнать какую, и как отключить другую, что бы не было подобных ошибок???

Автор: Vyacheslav 9.2.2007, 19:42
Это не библиотеки, а хидеры. У Вас конфликтует два хидера разных версий сокетов. INDY использует сокет, и Ваш модуль тоже использует сокет. Там уж сами смотрите, где уж там используется

Автор: Bima 10.2.2007, 18:05
В том то и дело, что на пустой форме и на модуле я не подсоединяю никаких хидеров!!!
Когда ставлю компонент INDY, то возможно в его хидерах содержится упоминание winsock2.h, но в новом модуле, вообще нет хидеров, кроме VCL.H

Автор: Bima 12.2.2007, 08:08
Ошибся, в новом модуле вообще нет хидеров!!!

Автор: Vyacheslav 12.2.2007, 11:51
Цитата(Bima @  12.2.2007,  08:08 Найти цитируемый пост)
Ошибся, в новом модуле вообще нет хидеров!!! 

smile 
Чудес в прировде не бывает. У Вас на лицо конфликт двух хидеров. Так что ищите. Тем более делов  то найти. 

Автор: Bima 12.2.2007, 13:08
Dот мой проект, там нет вообще упоминаний winsock !!!

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