none
std::string non compatible RRS feed

  • Question

  • Bonjour;

    J'ai un code qui suit dans lequel la std::string Value ne passe pas dans NormColor

    if (itOptionEx->sKeyName == L"FocusedCellBackground")
            {
              std::string Value = objStrConv.awcstombs( (wchar_t*)itOptionEx->sValue.c_str());
              CTemp.assign( NormColor(  Value));
              objStrConv.StrFreeW( value);
              int iTest = CTemp.length();
              if( iTest < 2)
                 CTemp = L"clBlue";
              ColorTemp = StringToColor( CTemp);
            }

    et voilà le message d'erreur. pour moi incompréhensible d'autant plus que std::basic_string est un type refusé par le compilateur:

    1>..\..\SoftwareManager.cpp(366): error C2664: 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::assign(std::basic_string<_Elem,_Traits,_Ax> &&)' : impossible de convertir le paramètre 1 de 'std::string' en 'std::basic_string<_Elem,_Traits,_Ax> &&'
    1>          with
    1>          [
    1>              _Elem=wchar_t,
    1>              _Traits=std::char_traits<wchar_t>,
    1>              _Ax=std::allocator<wchar_t>
    1>          ]
    1>          Raison : impossible de convertir de 'std::string' en 'std::basic_string<_Elem,_Traits,_Ax>'
    1>          with
    1>          [
    1>              _Elem=wchar_t,
    1>              _Traits=std::char_traits<wchar_t>,
    1>              _Ax=std::allocator<wchar_t>
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé


    Jean Noël Martin

    jeudi 28 juin 2012 07:56

Réponses

Toutes les réponses

  • Le message d'erreur indique qu'il n'est pas possible de convertir un
    type string en basic_string<wchar_t>.
    Vous ne pouvez pas utiliser une chaîne de caractères Ansi quand une
    chaîne unicode est attendue. Utilisez wstring à la place de string.
     
    • Marqué comme réponse JeanNoel53 jeudi 28 juin 2012 15:34
    • Non marqué comme réponse JeanNoel53 jeudi 28 juin 2012 17:26
    jeudi 28 juin 2012 12:50
    Auteur de réponse
  • le code suivant marche:

            if (itOptionEx->sKeyName == L"FocusedCellBackground")
            {
              CTemp.assign( NormColor( (wchar_t*)itOptionEx->sValue.c_str());
              int iTest = CTemp.length();
              if( iTest < 2)
                 CTemp = L"clBlue";
              ColorTemp = StringToColor( CTemp);
            }
    mais pas avec une wstring.


    Jean Noël Martin

    jeudi 28 juin 2012 15:34
  • itOptionEx->sKeyName == L"FocusedCellBackground"

    Comparaison de chaine native avec "==" ????

    Trop de cast à la C pour que le code soit "honnête".


    Paul Bacelar, Ex - MVP VC++

    jeudi 28 juin 2012 16:31
    Modérateur
  • J'ai maintenant codé:en retirant les cast

            if (itOptionEx->sKeyName == L"FocusedCellBackground")
            {
              CTemp.assign( NormColor( itOptionEx->sValue.c_str()));
              int iTest = CTemp.length();
              if( iTest < 2)
                 CTemp = L"clBlue";
              ColorTemp = StringToColor( CTemp);
            }

    et j'ai le même message d'erreur: j'ai vérifié que itOptionEx->sValue était une std::wstring et donc avec le .c_str() ca donne un wchar_t*

    1>..\..\SoftwareManager.cpp(366): error C2664: 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::assign(std::basic_string<_Elem,_Traits,_Ax> &&)' : impossible de convertir le paramètre 1 de 'std::string' en 'std::basic_string<_Elem,_Traits,_Ax> &&'
    1>          with
    1>          [
    1>              _Elem=wchar_t,
    1>              _Traits=std::char_traits<wchar_t>,
    1>              _Ax=std::allocator<wchar_t>
    1>          ]
    1>          Raison : impossible de convertir de 'std::string' en 'std::basic_string<_Elem,_Traits,_Ax>'
    1>          with
    1>          [
    1>              _Elem=wchar_t,
    1>              _Traits=std::char_traits<wchar_t>,
    1>              _Ax=std::allocator<wchar_t>
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    
    jeudi 28 juin 2012 17:31
  • ".c_str() ca donne un wchar_t*"

    un "wchar_t*" ou un "const wchar_t*" ?

    assign veut des const.

    La fonction "NormColor" renvoie quoi comme type ???


    Paul Bacelar, Ex - MVP VC++

    vendredi 29 juin 2012 09:49
    Modérateur
  • il y avait bien des incohérence entre les types dans la fonction appelée et dans les appelants.

    Jean Noël Martin


    • Marqué comme réponse JeanNoel53 vendredi 29 juin 2012 12:25
    • Modifié JeanNoel53 vendredi 29 juin 2012 12:25
    vendredi 29 juin 2012 12:25