У меня проблема с компиляцией программы в Visual Studio 2010 на компьютере с Windows 7. Я получаю следующие ошибки при компиляции в режиме выпуска, но не в режиме отладки. Я тщательно проверил все настройки свойств для обоих режимов, и они одинаковы, за исключением того, где они должны быть разными; параметр генерации кода — / MD для среды выполнения и / MDd для отладки; те же настройки, в которых я скомпилировал библиотеки wxWidgets (2.8.12), а имена библиотек wxWidgets немного отличаются. Как я уже сказал, у меня нет проблем с компиляцией и запуском моей программы в режиме отладки, или с запуском примеров wxWidgets в любом режиме. Я также ссылаюсь на wxMathPlot, который является надстройкой wxWidgets, я не знаю, насколько это актуально. Я могу запустить отладочную или выпускную версии образцов wxMathPlot.
Теперь у Microsoft есть немного информации об этих ошибках компилятора, но ничего, что мне слишком помогло:
http://msdn.microsoft.com/en-us/library/3ys51zwc(v=vs.71).aspx
http://msdn.microsoft.com/en-us/library/sksadsda.aspx
Это утверждение кажется актуальным:
«Вы также можете получить C2011, если вы импортируете библиотеку типов более одного раза в один и тот же файл»
За исключением того, что я не знаю, что это значит, или как я могу это делать. Кажется любопытным, что я буду делать это для одного режима, а не для другого. Кто-нибудь видел эту проблему и знает, как ее преодолеть?
Спасибо
Фил
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(124): error C2332: 'class' : missing tag name
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(124): error C2011: '<unnamed-tag>' : 'enum' type redefinition
1> C:\WXWIDGETS\wxWidgets-2.8.12\include\wx/app.h(48) : see declaration of '<unnamed-tag>'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(124): error C2059: syntax error : 'constant'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(125): error C2143: syntax error : missing ')' before '>'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(131): error C2065: 'pp' : undeclared identifier
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(134): warning C4229: anachronism used : modifiers on data are ignored
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(134): error C2365: 'IUnknown::QueryInterface' : redefinition; previous definition was 'member function'
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(116) : see declaration of 'IUnknown::QueryInterface'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(134): error C2998: 'HRESULT QueryInterface' : cannot be a template definition
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(316): error C2989: 'AsyncIUnknown' : class template has already been declared as a non-class template
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(59) : see declaration of 'AsyncIUnknown'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(434): error C2989: 'IClassFactory' : class template has already been declared as a non-class template
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h(65) : see declaration of 'IClassFactory'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.h(269): error C2989: 'IRpcChannelBuffer' : class template has already been declared as a non-class template
1> c:\program files (x86)\microsoft sdks\windows\v7.0a\include\rpcndr.h(708) : see declaration of 'IRpcChannelBuffer'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.h(305): error C2989: 'IRpcStubBuffer' : class template has already been declared as a non-class template
1> c:\program files (x86)\microsoft sdks\windows\v7.0a\include\rpcndr.h(2489) : see declaration of 'IRpcStubBuffer'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.h(653): error C2143: syntax error : missing ';' before 'identifier'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.h(653): warning C4091: 'typedef ' : ignored on left of '_COSERVERINFO' when no variable is declared
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.h(653): fatal error C1075: end of file found before the left brace '{' at 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.h(595)' was matched
Вот фрагмент кода, на который он жалуется из файла unknwn.h, начиная со строки 124:
template<class Q>
HRESULT
#ifdef _M_CEE_PURE
__clrcall
#else
STDMETHODCALLTYPE
#endif
QueryInterface(Q** pp)
{
return QueryInterface(__uuidof(Q), (void **)pp);
}
Задача ещё не решена.
Других решений пока нет …