我有一个包含许多.cpp文件的项目。在其中一些文件中,我需要在wchar_t模式下使用pugixml,其中一些已经在常规模式下使用char和pugixml实现了。
我知道我必须使用定义
#define PUGIXML_WCHAR_MODE
当我尝试在使用wchar_t模式的文件中这样做时:
#define PUGIXML_WCHAR_MODE
*some code*
#undef
它给我链接错误。我做错了什么?
最佳答案
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"
应该是这样。