2010-06-01 3 views
4

Когда я включаю стандартную библиотеку в проект VS2010, я получаю TON таких ошибок (эти ошибки были связаны с добавлением shellapi.h). Я получаю подобные ошибки при добавлении чего-то вроде Windows.h или Wininet.h или что-то в этом роде.VS2010 Множество ошибок при включении стандартных библиотек

1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(56): error C2065: 'HDROP' : undeclared identifier 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(56): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C2144: syntax error : 'int' should be preceded by ';' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C2146: syntax error : missing ';' before identifier 'STDAPICALLTYPE' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C2146: syntax error : missing ';' before identifier 'DragQueryFileA' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C2065: 'HDROP' : undeclared identifier 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C2146: syntax error : missing ')' before identifier 'hDrop' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(59): error C2059: syntax error : ')' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(61): error C2144: syntax error : 'int' should be preceded by ';' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(61): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ShellAPI.h(61): error C2086: 'int EXTERN_C' : redefinition 

Я уверен, что это просто что-то делать с настройкой проекта, но я понятия не имею, что установку мне нужно изменить. С чего начать?

UPDATE

Решение было убедиться, что был загружен windows.h первым. Я не знал, что это зависит от этого. Для справок в будущем, где я должен смотреть на эту зависимость?

+2

Пожалуйста, покажите нам все, что включено. – SLaks

+3

Вы не можете # включить shellapi.h без #including windows.h. Покажите нам список, который вы получите, когда начинаете с windows.h –

ответ

2

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

+0

Хотя это может быть правдой, это не является достаточной причиной для включения заголовков системы перед вашим собственным. Я всегда включал свои собственные заголовки, затем заголовки других библиотек (продавцы, boost и т. Д.), А затем, наконец, заголовки систем; Это помогает гарантировать, что заголовки, которые вы пишете, могут «стоять в одиночестве» и содержать инструкции #include для всего, что * они сами * необходимы для компиляции. – aldo

5

Я получил эти те же самые ошибки при добавлении

#include <shellapi.h> 

к одному из моих файлов. Я решил проблему, добавив

#include <windows.h> 

непосредственно перед этим.

(Вы должны любить - или, скорее, ненавижу - Windows заголовки, которые не #include заголовки, которые они сами требуют Если бы я сделал это в моем коде я бы получить кричал на своих начальников. !)

+0

... или, скорее, ненавижу ... +1 – Iuliu

+0

Zis is, как вы говорите ... abseurd! – Claudiu