C++ – wxWidgets and VC++

cvisual c++wxwidgets

I decided to familiarize myself with wxWidgets today.
I downloaded version 2.8.9 (current release), and compiled the library in all the desired modes.

I am able to build/run the samples that ship with wxWidgets out of the box.
However, when I compile with /Za (i.e., language extensions disabled), I get over 100 build errors on even the smallest wxWidgets sample.

I am unable to find any documentation on this issue. Could I define something that will switch wxWidget's internals to be standards compliant (at least as far as VC++'s compliance goes)?

Perhaps I did something wrong while building the original library… Has anyone even encountered this "issue" before?

Thanks!

EDIT: I forgot to mention that I'm using VC++ 9.

Also, here are the first few errors:

—— Build started: Project: minimal, Configuration: Unicode Debug Win32 ——

Compiling…

minimal.cpp

c:\wxWidgets-2.8.9\include\wx/dynarray.h(69) : error C2143: syntax error : missing ')' before '*'

c:\wxWidgets-2.8.9\include\wx/dynarray.h(69) : error C2143: syntax error : missing ';' before '*'

c:\wxWidgets-2.8.9\include\wx/dynarray.h(69) : error C2059: syntax error : ')'

c:\wxWidgets-2.8.9\include\wx/dynarray.h(69) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int

c:\wxWidgets-2.8.9\include\wx/dynarray.h(810) : error C2146: syntax error : missing ';' before identifier 'SCMPFUNC'

c:\wxWidgets-2.8.9\include\wx/dynarray.h(810) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int

c:\wxWidgets-2.8.9\include\wx/dynarray.h(810) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int

c:\wxWidgets-2.8.9\include\wx/dynarray.h(811) : error C2146: syntax error : missing ';' before identifier 'SCMPFUNC'

c:\wxWidgets-2.8.9\include\wx/dynarray.h(811) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int

c:\wxWidgets-2.8.9\include\wx/dynarray.h(811) : error C4430: missing type specifier – int assumed. Note: C++ does not support default-int

EDIT: It looks like the first error's caused by the fact that _cdecl is used. It looks like defs.h only checks if __VISUALC__ is defined. Nothing about pedantism in sight…

Best Answer

You'll probably find that you won't be able to build even a basic Win32 application, let alone a wxWidgets app, with /Za, because the Windows Platform SDK headers included with VS2008 use language extensions. The only solution is to disable /Za.

The specific error you're seeing is because the _cdecl keyword is a Microsoft extension, and not part of standard C++. For more information, see the documentation for /Za, and the Microsoft Extensions to C and C++ and C++ Keywords pages in MSDN.

Related Topic