boost :: filesystem :: path и std :: string - PullRequest
       38

boost :: filesystem :: path и std :: string

3 голосов
/ 11 октября 2010

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

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

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

но выясняется, что boost :: filesystem :: path :: string () несовместима с этим конструктором String, но при обычном назначении все в порядке

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

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

РЕДАКТИРОВАТЬ: Проблема решена путем установки const 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 Ответ

4 голосов
/ 11 октября 2010

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

...