samedi 5 avril 2014

Is it possible to undefine a class in C++ (Visual Studio)?


Vote count:

0




I know, it may seem strange, but my goal is to undefine a class in C++. The root of the problem is in combining TinyXML2 and Boost unit tests.


Contents of the header file (Configuration.h) which is being tested:



...
#include <tinyxml2.h>
...


And this is the contents of my configurationTests.h file:



#include "unitTests.h"
#include "Configuration.h"

BOOST_AUTO_TEST_SUITE(configuration_test)

BOOST_AUTO_TEST_CASE(basic) {
...
}

BOOST_AUTO_TEST_SUITE_END( )


When I try to compile my tests, I'm getting an error:



error C2371: 'XMLDocument' : redefinition; different basic types c:\program files (x86)\windows kits\8.0\include\um\msxml.h 10085



Inside this file (msxml.h) on line 10085 we have this class definition:



class DECLSPEC_UUID("CFC399AF-D876-11d0-9C10-00C04FC99C8E")
XMLDocument;


When I remove those two lines, my tests do compile and everything seems fine. Of course, this is not a solution, but that fact prooves that something inside Boost unit tests library includes msxml.h is being included and somehow leads to conflict with TinyXML2 library.


I tried different solutions found in Google (like writing "#define WIN32_LEAN_AND_MEAN"), removing "using namespace tinyxml2" and making changes inside tinyxml2.cpp - nothing actually helps.


So, my question is simple: can I undefine (unload?) previously class in compile time in some tricky way? I tried "#undef XMLDocument", "#define XMLDocument 1" + "#undef XMLDocument" - nothing works.



asked 1 min ago






Aucun commentaire:

Enregistrer un commentaire