我有一个包含许多.cpp文件的项目。在其中一些文件中,我需要在wchar_t模式下使用pugixml,其中一些已经在常规模式下使用char和pugixml实现。 我知道我必须使用定义
#define PUGIXML_WCHAR_MODE
当我尝试在使用wchar_t模式的文件中执行此操作时:
#define PUGIXML_WCHAR_MODE
*some code*
#undef
它给了我链接错误。我做错了什么?
答案 0 :(得分:1)
pugixml不是以这种方式工作的。理想情况下,您可以尝试更改代码以使用一个编译标志组合(执行UTF-8< - > wchar_t转换的函数,pugi :: as_utf8和pugi :: as_wide,可能有帮助)。
有一种不受支持的方式可行,但不是特别漂亮 - 您可以为wchar配置重命名pugi命名空间。
要做到这一点,你必须创建一个特殊的标题,即pugixmlw.hpp,你将包括宽字符配置;此标题内容应大致如下:
#ifndef HEADER_PUGIXMLW_HPP
#define HEADER_PUGIXMLW_HPP
#define PUGIXML_WCHAR_MODE
#define pugi pugiw
#undef HEADER_PUGIXML_HPP
#undef HEADER_PUGICONFIG_HPP
#undef SOURCE_PUGIXML_CPP
#undef PUGIXML_TEXT
#undef PUGIXML_CHAR
#include "pugixml.hpp"
#undef PUGIXML_TEXT
#undef PUGIXML_CHAR
#undef HEADER_PUGIXML_HPP
#undef HEADER_PUGICONFIG_HPP
#undef SOURCE_PUGIXML_CPP
#undef pugi
#undef PUGIXML_WCHAR_MODE
#endif
如果您使用的是仅限标题的pugixml变体,那应该是它;如果您正在编译pugixml.cpp,则必须添加一个额外的源文件pugixmlw.cpp,其中包含以下内容:
#define PUGIXML_WCHAR_MODE
#define pugi pugiw
#include "pugixml.cpp"
应该是它。