0

YAML を C++ で学習しようとしています。指定された yaml-cpp ファイルを、CMake を使用して VC++ Express 2010 で .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 サンプル コードでも同じです。リリース モードでの出力は正しく、デバッグは停止し、同じアサート コードを返します。

参考までに、monster の >> 関数の { ブラケットでのリリース モードでのスタック呼び出しは次のようになります。

>   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で作ったyaml-cppのプロジェクトをデバッグ用にリビルドしたところ、今使ってみると問題なく動きます。これが明らかな場合は申し訳ありませんが、私はこの種の問題に慣れていません。

于 2012-01-17T06:42:02.007 に答える