2010-10-11 2 views
3

У меня есть класс String, который имеет член std :: string. Один из конструкторов -boost :: filesystem :: path и std :: string

String (std::string s) 
{ 
    // member: std::string _mString; 
    _mString = s; // error on path assignment 
} 

Теперь у меня есть функции, которые принимают параметр String в качестве параметра, например. Load (String path);

, но получается, что повышение :: файловая система :: путь :: строка() несовместима с этой строки конструктора, но, как правило, назначение нормально

boost::filesystem::path somepath("some directory") 
std::string filename = somepath.extension(); // OK! 

Что происходит? Как я могу заставить свой конструктор работать? Благодарю.

EDIT: проблема решена путем создания константы ref, но все же любопытно, почему ошибка, потому что кажется, что можно передать копию, поскольку она может быть назначена напрямую. Ошибки в файле xstring

void __CLR_OR_THIS_CALL _Tidy(bool _Built = false, 
     size_type _Newsize = 0) 
     { // initialize buffer, deallocating any storage 
     if (!_Built) 
      ; 
     else if (_BUF_SIZE <= _Myres) 
      { // copy any leftovers to small buffer and deallocate 
      _Elem *_Ptr = _Bx._Ptr; 
      if (0 < _Newsize) 
       _Traits_helper::copy_s<_Traits>(_Bx._Buf, _BUF_SIZE, _Ptr, _Newsize); 
      _Mybase::_Alval.deallocate(_Ptr, _Myres + 1); 
      } 
     _Myres = _BUF_SIZE - 1; // **** ERROR *** 
     _Eos(_Newsize); 
     } 
+1

Что неисправное назначение выглядит? –

+1

Можете ли вы разместить больше кода и деталей? – CharlesB

+0

в вашем конструкторе: 'String (std :: string s)' должно быть 'String (const std :: string & s)' –

ответ

4

в конструкторе: String (std::string s) должен быть String (const std::string& s)

 Смежные вопросы

  • Нет связанных вопросов^_^