我知道,这似乎很奇怪,但我的目标是在C++中取消类的定义。问题的根源在于将TinyXML2和Boost单元测试结合起来。
正在测试的头文件(Configury.h)的内容:
...
#include <tinyxml2.h>
...
这是我的配置Tests.h文件的内容:
#include "unitTests.h"
#include "Configuration.h"
BOOST_AUTO_TEST_SUITE(configuration_test)
BOOST_AUTO_TEST_CASE(basic) {
...
}
BOOST_AUTO_TEST_SUITE_END( )
当我试图编译我的测试时,我得到了一个错误:
错误C2371:'XMLDocument‘:重新定义;不同的基本类型c:\程序文件(x86)\windows工具包\8.0\包含\um\msxml.h 10085
在第10085行的这个文件(msxml.h)中,我们有以下类定义:
class DECLSPEC_UUID("CFC399AF-D876-11d0-9C10-00C04FC99C8E")
XMLDocument;
当我删除这两行时,我的测试就会编译,而且一切看起来都很好。当然,这不是一个解决方案,但这一事实预示着Boost单元测试库中的某些内容包含msxml.h,并以某种方式导致与TinyXML2库的冲突。
我尝试过在谷歌中找到不同的解决方案(比如编写"#define WIN32_LEAN_AND_MEAN")、删除“使用命名空间tinyxml2”以及在tinyxml2.cpp中进行更改--实际上没有任何帮助。
所以,我的问题很简单:我可以取消定义(卸载吗?)以前用某种棘手的方式在编译时定义了类?我尝试了"#undef XMLDocument“、"#define 1”+ "#undef XMLDocument“--没有任何效果。
MSXML_LIBRARY_DEFINED“更新:实际上,我通过在配置测试的第一行编写”#DefineTests.h“来解决这个问题。不过,我还是很想知道这个问题的答案。
发布于 2016-02-21 05:25:46
我认为您已经为tinyxml2使用了默认名称空间。尝试删除using namespace tinyxml2
,然后在下面的示例中使用它:tinyxml2::XMLDocument xDoc;
发布于 2014-04-05 13:16:04
试试这个:
namespace your_name_space
{
#include <tinyxml2.h>
}
从现在起,tinyxml2中的所有类都被您的命名空间所隐藏。
还必须为tinyxml2.cpp文件声明名称。
https://stackoverflow.com/questions/22886749
复制