У меня есть класс 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);
}
Что неисправное назначение выглядит? –
Можете ли вы разместить больше кода и деталей? – CharlesB
в вашем конструкторе: 'String (std :: string s)' должно быть 'String (const std :: string & s)' –