Frage

Ich habe eine String-Klasse, die ein Mitglied std :: string hat. Einer der Konstruktor ist

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

Ich habe jetzt Funktionen, die String als Parameter übernehmen, zum Beispiel Load (String path);

, aber es stellt sich heraus, dass boost :: filesystem :: path :: string () ist nicht kompatibel mit dem String-Konstruktor, doch normalerweise die Zuordnung ist ok

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

Was ist passiert? Wie kann ich meine Konstruktor Arbeit machen? Danke.

EDIT: Problem gelöst, indem es const ref zu machen, aber immer noch neugierig, warum der Fehler, weil es in Ordnung scheint eine Kopie zu übergeben, da es direkt zugeordnet werden kann. Fehler in Datei 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);
        }
War es hilfreich?

Lösung

in Ihrem Konstruktor: String (std::string s) sollte String (const std::string& s)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top