boost :: système de fichiers :: chemin et std :: string
-
29-09-2019 - |
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);
}
La solution
dans votre constructeur: String (std::string s)
doit être String (const std::string& s)