Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключаю <windows.h> и <winsock2.h>=ошибка 
V
    Опции темы
Dmi3ev
Дата 25.2.2009, 03:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



продолжаю в VS разбираться.
только подключаю <windows.h>, сразу проблемы (консоль).
Цитата(output)

1>------ Build started: Project: Socket1, Configuration: Debug Win32 ------
1>Compiling...
1>Socket1.cpp
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : warning C4005: 'AF_IPX' : macro redefinition
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : see previous definition of 'AF_IPX'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(127) : warning C4005: 'AF_MAX' : macro redefinition
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(479) : see previous definition of 'AF_MAX'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(163) : warning C4005: 'SO_DONTLINGER' : macro redefinition
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(402) : see previous definition of 'SO_DONTLINGER'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: 'sockaddr' : 'struct' type redefinition
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(485) : see declaration of 'sockaddr'
//...
1>Socket1 - 105 error(s), 16 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

как это исправить?

Это сообщение отредактировал(а) GremlinProg - 27.2.2009, 00:02


--------------------

PM MAIL   Вверх
andrew_121
Дата 25.2.2009, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 2
Всего: 33



Dmi3ev, Какая версия студии?
Покажи порядок подключения хедеров.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mrbrooks
Дата 25.2.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Dmi3ev, а ты где именно его инклюдишь? В stdafx.h?
PM MAIL   Вверх
cutwater
Дата 25.2.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: нет
Всего: 10



перед инклюдами нужно тогда сделать такой хитрый дефайн

#define WIN32_LEAN_AND_MEAN

Это сообщение отредактировал(а) cutwater - 25.2.2009, 12:40


--------------------
user posted image
PM MAIL   Вверх
Dmi3ev
Дата 25.2.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



cutwater, действительно, проблема решилась, а можно пояснения???


--------------------

PM MAIL   Вверх
cutwater
Дата 25.2.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: нет
Всего: 10



В двух словах - исключает редко используемые описания и т.д. из заголовков windows
А если подробней, то в MSDN. 

Цитата

Faster Builds with Smaller Header Files

You can reduce the size of the Windows header files by excluding some of the less common API declarations as follows:

    * Define WIN32_LEAN_AND_MEAN to exclude APIs such as Cryptography, DDE, RPC, Shell, and Windows Sockets.
    * Define one or more of the NOapi symbols to exclude the API. For example, NOCOMM excludes the serial communication API. For a list of support NOapi symbols, see Windows.h.



Это сообщение отредактировал(а) cutwater - 25.2.2009, 12:37


--------------------
user posted image
PM MAIL   Вверх
pan2004
Дата 25.2.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: нет
Всего: 9



Ну, от отсутствия дефайна такой проблемы быть в принципе не должно.
Цитата

 error C2011: 'sockaddr' : 'struct' type redefinition

Одна и та же структура объявляется в двух разных хидерах. Видимо, у MS не все в порядке с головой было.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
Dmi3ev
Дата 25.2.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



pan2004, не понял, за что ты мне репутацию уменьшил, но да ладно дело не в этом.
Я разбираюсь в студии и не понимаю, почему
Код

#include "stdafx.h"
//#define WIN32_LEAN_AND_MEAN 
#include <windows.h>
#include <winsock2.h>
#include <iostream>

using namespace std;

int _tmain()
{
    system("pause");


    return 0;
}

вот это выдает 105 ошибок и 16 предупреждений
вот они...
Цитата

1>------ Build started: Project: Socket1, Configuration: Debug Win32 ------
1>Compiling...
1>Socket1.cpp
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : warning C4005: 'AF_IPX' : macro redefinition
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : see previous definition of 'AF_IPX'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(127) : warning C4005: 'AF_MAX' : macro redefinition
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(479) : see previous definition of 'AF_MAX'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(163) : warning C4005: 'SO_DONTLINGER' : macro redefinition
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(402) : see previous definition of 'SO_DONTLINGER'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: 'sockaddr' : 'struct' type redefinition
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(485) : see declaration of 'sockaddr'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: syntax error : missing '}' before 'constant'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: syntax error : missing ';' before 'constant'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2059: syntax error : 'constant'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C2143: syntax error : missing ';' before '}'
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

...
1>d:\programms\vs\vc\include\xutility(1283) : fatal error C1003: error count exceeds 100; stopping compilation
1>Build log was saved at "file://c:\Users\Павел\Documents\Visual Studio 2008\Projects\Socket1\Socket1\Debug\BuildLog.htm"
1>Socket1 - 105 error(s), 16 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



а вот это пашет
Код

#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN 
#include <windows.h>
#include <winsock2.h>
#include <iostream>

using namespace std;

int _tmain()
{
    system("pause");


    return 0;
}

лучше объясните, а не репутацию мне уменьшайте, мне на это по... а вот почему так происходит, меня волнует...



 ! 
bsa
Пожалуйста, в следующий раз не размещай такое количество бесполезной информации
Кнопку "Код" используй для кода, а не для вывода ошибок. В крайнем случае используй его вариант "Без подсветки"


Это сообщение отредактировал(а) bsa - 25.2.2009, 18:40


--------------------

PM MAIL   Вверх
Dem_max
Дата 25.2.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



pan2004
Цитата

Ну, от отсутствия дефайна такой проблемы быть в принципе не должно.

У Builder тоже самое.
решается так
Код

#include <winsock2.h>
#include <windowsx.h>  






--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
mrbrooks
Дата 26.2.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



пробуй так:
Код

#pragma comment (lib, "ws2_32.lib")
#include <winsock2.h>
#include <windows.h>
#include <iostream>


совет - выше написанное - вставь в stdafx.h

Добавлено через 1 минуту и 40 секунд
собственно библиотеку ws2_32.lib можешь присоединить и в свойствах проекта. Иначе работа с сокетами нормальной не будет.

Добавлено через 3 минуты и 13 секунд
будь внимателен сначало winsock2.h, затем windows.h  smile 
PM MAIL   Вверх
mrbrooks
Дата 26.2.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Можно и так:
Код

#pragma comment (lib, "ws2_32.lib")
#define _WINSOCKAPI_
#include <windows.h>
#include <winsock2.h>


Цитата(Dmi3ev @  25.2.2009,  18:25 Найти цитируемый пост)
вот почему так происходит, меня волнует..

Дело в том, что в windows.h инклудится winsock.h, который во многом повторяет winsock2.h.

Добавлено через 3 минуты и 42 секунды
Код

#define _WINSOCKAPI_

это собственно и отменяет включение winsock.h, как и WIN32_LEAN_AND_MEAN - только более конкретно.
PM MAIL   Вверх
Dmi3ev
Дата 26.2.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



mrbrooks, спасибо за объяснения. Я пишу теперь вот так:
Код

#include <winsock2.h>
#include <windows.h>

в такой последоватльности все почему-то работает, а в такой нет:
Код

#include <windows.h>
#include <winsock2.h>

ладно, понял суть проблемы, знаю пути ее решения (причем несколько), уже неплохо, в дебри лезть не нужно, наверно...
там просто ошибки, не хватает точки с запятой... левые какие-то...


--------------------

PM MAIL   Вверх
Олег2005
Дата 26.2.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: нет
Всего: 11



если есть
#include <winsock2.h>
то это вообще не надо
#include <windows.h>
PM MAIL WWW MSN   Вверх
GremlinProg
Дата 26.2.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



вобщем-то так оно и есть: winsock2.h сам подключает windows.h, если он не был подключен
Код

#ifndef _INC_WINDOWS
#include <windows.h>
#endif /* _INC_WINDOWS */

причем перекрывает перед этим включение winsock.h, чтобы не было конфликтов
Код

#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */


Добавлено через 13 минут и 53 секунды
 smile на счет замечания Dmi3ev - справедливо в любом случае, поскольку первая ошибка - корень проблем, остальные - следствия предыдущих, зачем грузить моск форумчанам ненужной информацией,
для гармонии достаточно было пару-тройку строк оставить и все




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
ZakharAV
Дата 13.10.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 4.10.2009

Репутация: нет
Всего: нет



Добрый день, люди. Начал осваивать VC. Установил VC2005 Express Edition. При компиляции программки выдает сообщение - нет windows.h. В установленном комплекте его нет.  Вопрос - в Express Edition его по определению не может быть или я что-то не то и не туда вставил?  smile

Добавлено через 3 минуты и 52 секунды
Прошу прощения - ошибся темой. Пощел к новичкам
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1165 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.