Question

J'ai une classe chaîne qui a un membre std :: string. L'un des constructeur est

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

J'ai maintenant des fonctions qui prennent chaîne comme paramètre, par exemple Load (String path);

mais il se trouve que le système de fichiers boost :: :: :: chemin string () est incompatible avec ce constructeur String, encore, l'attribution normalement est ok

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

Qu'est-ce qui se passe? Comment puis-je faire mon travail de constructeur? Merci.

EDIT: Problème résolu en le rendant ref const, mais toujours curieux de savoir pourquoi l'erreur car il semble correct de passer une copie, car il peut être attribué directement. Erreur dans le fichier 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);
        }
Était-ce utile?

La solution

dans votre constructeur: String (std::string s) doit être String (const std::string& s)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top