0

我正在尝试使用 C++ 学习 YAML,我使用 CMake 使用 VC++ Express 2010 将给定的 yaml-cpp 文件转换为 .dll 和 .lib 文件。我设置项目的方式与设置 SFML 等其他库的方式相同。

我的问题是,当我尝试构建 yaml-cpp 站点上给出的示例代码的发布版本时,我得到:

Ogre
Dragon
Wizzard

但是,当我尝试构建调试版本时,我得到:

Assertion failed: false, file d:\microsoft visual studio 10.0\vc\include\yaml-cp
p\nodeimpl.h, line 39

我不知道如何处理这个。我需要构建库的调试版本吗?如果是,如何?如果我设法改变某些东西,我不知道哪些项目选项会影响这一点。

当我编译时,我得到一个警告:

d:\microsoft visual studio 10.0\vc\include\yaml-cpp\conversion.h(51): warning C4146: unary minus operator applied to unsigned type, result still unsigned

有很多模板打印输出,fe:

1>          d:\microsoft visual studio 10.0\vc\include\yaml-cpp\nodereadimpl.h(35) : see reference to function template instantiation 'bool YAML::ConvertScalar<T>(const YAML::Node &,T &)' being compiled
1>          with
1>          [
1>              T=unsigned int
1>          ]

这是我这边的问题吗?错误的 CMake 文件和编译?

4

1 回答 1

0
>   yaml_test.exe!main()  Line 108  C++
    yaml_test.exe!__tmainCRTStartup()  Line 555 + 0x19 bytes    C
    yaml_test.exe!mainCRTStartup()  Line 371    C
    kernel32.dll!7c817077()     
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]

中止:

doc[i] >> 怪物;

程序不会尝试进入重载函数。

在我自己的代码中,当我尝试使用我的第一个 >> 运算符时它会中断,这是 int 的内置运算符。

我正在使用来自http://pastebin.com/PdKWDgQa的代码,尽管对于原始 yaml-cpp 示例代码,它的作用相同。Release 模式下的输出是正确的,Debug 停止并返回相同的断言代码。

作为参考,在怪物的 >> 函数中 { 括号中的释放模式下的堆栈调用如下所示:

>   yaml_test.exe!operator>>(const YAML::Node & node={...}, Monster & monster={...})  Line 36   C++
    yaml_test.exe!main()  Line 109  C++
    msvcr100.dll!_initterm(void (void)* * pfbegin=0x00000001, void (void)* * pfend=0x003a5050)  Line 873    C
    yaml_test.exe!__tmainCRTStartup()  Line 555 + 0x17 bytes    C
    kernel32.dll!7c817077()     
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]

编辑:

实际上,我已经重建了使用 CMake 作为 Debug 制作的 yaml-cpp 项目,现在使用它时一切正常。如果这很明显,我很抱歉,我是这类问题的新手。

于 2012-01-17T06:42:02.007 回答