YAML с VC ++ 2010 будет компилироваться в Release, но не в Debug - PullRequest
0 голосов
/ 14 января 2012

Я пытаюсь изучить YAML на C ++, я превратил указанные файлы yaml-cpp в файлы .dll и .lib с VC ++ Express 2010 с помощью CMake.Я настроил свой проект таким же образом, как и другие библиотеки, такие как SFML.

Моя проблема заключается в том, что при попытке создать версию Release примера кода, приведенного на сайте yaml-cpp, я получаю:

Ogre
Dragon
Wizzard

Однако, когда я пытаюсь создать версию Debug, я получаю:

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 и компиляция?

1 Ответ

0 голосов
/ 17 января 2012
>   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] >> monster;

Программа не пытается ввести перегруженную функцию.

В моем собственномкод, который ломается, когда я пытаюсь использовать свой первый оператор >>, который является встроенным оператором int.

Я использую код из http://pastebin.com/PdKWDgQa,, хотя для исходного примера yaml-cppкод это делает то же самое.Вывод в режиме Release правильный, отладка останавливается и возвращает тот же код подтверждения.

Для справки, вызов стека в режиме Release в {скобке в функции >> для 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]

РЕДАКТИРОВАТЬ:

На самом деле, я перестроил проект yaml-cpp, который я сделал с CMake в качестве отладки, все работает нормально, когда я использую его сейчас.Извините, если это очевидно, я новичок в подобных вопросах.

...