2016-04-15 8 views
0

Я готов сделать 2D-игру с SDL, и я следую за книгой Шона Митчелла. Но я столкнулся с серьезными трудностями с этой пользовательской ошибкой преобразования типа при попытке скомпилировать мой проект ...Невозможно преобразовать из const TiXmlString в const std :: string &

Кроме того, я не знаком с этой темой. Я наблюдал за некоторыми учебниками и искал в Интернете решение.

Мне нужно добавить

operator std::string&() const { return ???;} 

к tinyxmlstr.h в классе TiXmlString ли? Если да, то как его реализовать? Что я должен вернуть?

The Errors

Если я не определить STL (который я использую) в tinyxml.h, компилятор возвращает ошибку тяг.

Error 19 error LNK2019: unresolved external symbol "public: virtual __cdecl TiXmlNode::~TiXmlNode(void)" ([email protected]@[email protected]) referenced in function "public: virtual __cdecl TiXmlDocument::~TiXmlDocument(void)" ([email protected]@[email protected])

Without STL

StateParser класс и реализация такой же, как тот, в книге.

И, наконец, если у меня где-то есть ошибка, как правильно его отладить и где его искать? Заранее спасибо!

+0

Поместите всю релевантную информацию в свой вопрос, а не в изображения, связанные где-то в другом месте. – stark

ответ

0

Ошибка ясно: без конвертации от const TiXmlString до const std::string &.

Согласно this page, если я не ошибаюсь, нет даже прямое преобразование TiXmlString в std::string

Я полагаю, вы можете написать метод, как это (так же, как value() возвращающие const char *)

std::string valueStr() cont 
{ return value.c_str(); } 

, но в этом случае вы возвращаете копию value (так возвращает const std::string, вместо простой std::string, бесполезно), а не ссылка. Я не знаю, хорошо ли это для вас.

+0

Спасибо, что исправлены некоторые ошибки. И у меня остались только бинарной ошибка оператора, так что я написал оператор = 'TiXmlString и оператора = (Const станд :: строка и копию) \t { \t \t возвращение правопреемника (copy.c_str(), copy.length()) ; \t} 'вот так. Он работал, но теперь есть еще одна ошибка 'Ошибка ошибка MSB6006:« CL.exe »вышла с кодом 2. \t' –

+0

'Извините, но у меня слишком мало информации, чтобы узнать, где может произойти новая ошибка , Я могу только сказать вам, что ваш 'operator =' кажется мне прав (хотя я бы написал так: TiXmlString & operator = (const std :: string & copy) {assign (copy.c_str(), copy.length()) ; return * this;} ') – max66