使用旧的TinyXml的时候总是报这个错误,注意:这个错误和你的编译器版本有直接的关系。我用VS2010就没有问题,用VS2017就有这个问题了。
为啥呢?
主要是因为编译器的更新,舍弃了一部分旧的头文件和库。例如 stdext::hash_set这类哈希集合都会被淘汰,转而使用新的改造类型 unordered_set。如果你的项目都在比较旧的编译器下(如VS2010之前)进行工作,转移到新的编译器旧水土不服,这时候如果还想使得旧项目像往常一样运行,必须声明调用库使用的是旧的,所以如上面的报错,我们旧必须加入
#pragma comment(lib, "legacy_stdio_definitions.lib")
这行语句。
还有另一种情况:
也是在更新编译器之后发现的,即使将它加入到编译器中:
#pragma comment( lib, "Dingle_s.lib")
#pragma comment( lib, "CMWSN_V107.lib")
#pragma comment(lib, "legacy_stdio_definitions.lib")
重新编译,还会提示报错:
这是因为 legacy_stdio_definitions.lib是新的VS版本为了兼容旧vs版本所以重新编译生成的一个stdio相关封装lib,里面存在很多不安全的函数,所以必须设置为不进行安全处理检查: