Ошибка компилятора C ++ C2371 - переопределение WCHAR

Я получаю ошибку компилятора C ++ C2371, когда включаю файл заголовка, который сам включает odbcss.h. Мой проект настроен на MBCS.

C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ include \ odbcss.h (430): ошибка C2371: 'WCHAR': переопределение; различные базовые типы 1>
C: \ Program Files \ Microsoft SDK \ Windows \ v6.0A \ include \ winnt.h (289): см. объявление 'WCHAR'

Я не вижу никаких определений в odbcss.h, которые можно было бы установить, чтобы этого избежать. Кто-нибудь еще видел это?


person Brian Stewart    schedule 03.09.2008    source источник


Ответы (4)


Это известная ошибка - см. Веб-сайт Microsoft Connect:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98699

Ошибка не возникает, если вы компилируете свое приложение как Unicode вместо MBCS.

person ChrisN    schedule 03.09.2008

На различных форумах в сети есть полдюжины сообщений об этом - это может быть проблемой, когда odbcss.h используется в присутствии MFC. Большинство ответов связано с изменением порядка включаемых заголовков (отладка voodoo). Заголовок, который включает odbcss.h, отлично компилируется в собственном проекте, но когда он включается в другой проект, он выдает эту ошибку. Мы даже поместили его в stdafx.h последнего проекта сразу после включения базы для MFC, и все равно без радости. В конце концов мы обошли его, переместив его в файл cpp в исходном проекте, который не использует MFC (что в любом случае следовало бы сделать, но это был не наш код). Итак, у нас есть обходной путь, но нет реального решения.

person Brian Stewart    schedule 03.09.2008

Эта ошибка возникает, когда вы повторно объявляете переменную с тем же именем, что и переменная, которая уже была объявлена. Вы смотрели, объявил ли odbcss.h переменную, которая у вас уже есть?

person Craig H    schedule 03.09.2008

это помогает?

http://bytes.com/forum/thread602063.html

Контент из ветки:

Бруно ван Дурен [MVP VC ++], но я знаю решение этой проблемы. он решает эту проблему, изменяя настройку проекта «Рассматривать wchar_t как встроенный тип», значение «Нет (/ Zc: wchar_t-)». Но я использую «Xtreme Toolkit Professional Edition» для улучшения внешнего вида и ощущения приложения. Когда я исправляю указанную выше проблему, изменяя настройки проекта, новые ошибки связывания появляются из библиотеки Xtreme Toolkit. Итак, что я делаю, чтобы исправить эту проблему, в настройках проекта «Рассматривать wchar_t как встроенный тип» значение «да», и я написал следующие утверждения, в которых я включил файл заголовка wab.h. Вы можете изменить этот параметр для каждого файла кода, чтобы только определенные файлы компилировались с этим конкретным параметром. Если вы можете решить свои проблемы таким образом, это будет самое чистое решение.

#define WIN16

#include "wab.h"

#undef WIN16

и после этого мой проект работает нормально, и все, что связано с WAB, также работает нормально. Кто-нибудь направит меня, это правильный способ решить эту проблему ??? и повлияет ли это на остальную часть проекта ?? Я бы не стал об этом беспокоиться. независимо от определения, в обоих случаях это 16-битная переменная. Я согласен с тем, что это не самое лучшее решение, но оно должно работать, ЕСЛИ WIN16 не оказывает другого влияния на файл wab.h.

--

С уважением, Бруно ван Дурен [email protected] Удалите только "_nos_pam"

person John Boker    schedule 03.09.2008
comment
Отлично! Намного лучше... :) - person Mac; 14.11.2012