VS2010 Много ошибок при включении стандартных библиотек - PullRequest
4 голосов
/ 02 июня 2010

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

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 ]

5 голосов
/ 07 февраля 2014

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

#include <shellapi.h>

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

#include <windows.h>

прямо перед ним.

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

2 голосов
/ 02 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...