FLIR_NRG
FLIR_NRG

Reputation:

wxWidgets and VC++

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...

Upvotes: 2

Views: 1409

Answers (1)

ChrisN
ChrisN

Reputation: 16953

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.

Upvotes: 5

Related Questions