J'essaie donc de convertir une valeur entière en une chaîne, puis d'ajouter la chaîne à un caractère const déjà existant *. Mais comme mentionné, j'obtiens cette erreur:

erreur: l'expression doit avoir un type énumération intégrale ou non étendue.

 objDim += objDimStr.c_str();

Des idées pourquoi? Mon code est le suivant:

    const char* objDim = "The object dimension is: ";
    int objDimension = geo->Dimension();
    std::string objDimStr = std::to_string(objDimension);
    objDim += objDimStr.c_str();
0
Xyber 101 20 nov. 2018 à 15:27

4 réponses

Meilleure réponse

objDim est un pointeur . Lorsque vous ajoutez au pointeur, vous ajoutez au pointeur lui-même et n'ajoutez rien aux données vers lesquelles il pointe.

Et vous ne pouvez pas tout ajouter à un pointeur, essentiellement des valeurs entières. Et ajouter deux pointeurs comme vous le faites n'a aucun sens (c'est pourquoi ce n'est pas autorisé).

Si vous souhaitez pouvoir ajouter des chaînes, utilisez std::string pour toutes les chaînes.

En outre, le fait que vous ayez besoin d'utiliser le qualificatif const devrait également donner des indications sur le fait que ce vers quoi le pointeur pointe est constant et ne peut donc pas être modifié (y compris ajouté à).


Et dans ce cas, vous n'avez besoin d'aucune des variables temporaires objDimension ou objDimStr (sauf si vous les utilisez plus tard dans le code):

std::string objDim = "The object dimension is: " + std::to_string(geo->Dimension());

Ici, l'ajout fonctionne car il y a une surchargée operator+ fonction qui prend les bons arguments dans le bon ordre et renvoie un nouvel objet std::string.

2
Some programmer dude 20 nov. 2018 à 12:42

Je suppose que vous vous attendiez à obtenir une concaténation de chaînes. Non, ce n'est pas comme ça que ça marche. objDim n'est qu'un pointeur vers une zone mémoire non modifiable contenant des caractères. La seule application possible de l'opérateur += qui serait compilé est si vous l'incrémentiez de quelques caractères:

objDim += 11;
std::cout << objDim << '\n'; // prints "dimension is: ";

Pour concaténer des chaînes, vous pouvez:

  1. Soit attribuez le résultat à un objet string:

    std::string result = objDim + objDimStr;
    

    (Notez l'absence de c_str n'importe où: vous ne pouvez pas additionner deux pointeurs, mais il y a une surcharge qui peut ajouter un pointeur char à un std::string.)

  2. Ou donnez un type approprié à objDim;

    std::string objDim{"The object dimension is: "};
    objDim += objDimStr;
    
2
bipll 20 nov. 2018 à 12:35

objDim n'est pas un std::string mais un pointeur, donc votre l'opérateur de concaténation (+) qui est défini pour std::string ne fonctionnera pas dessus.

Définissez-le comme un std::string et vous pourrez l'utiliser pour y concaténer d'autres std::string.

1
P.W 20 nov. 2018 à 12:33
objDim += objDimStr.c_str();

Ici, vous ajoutez un pointeur vers un autre au lieu de concaténer la chaîne. Vous devez utiliser std :: string pour concaténer, par exemple:

const char* objDim = "The object dimension is: ";
int objDimension = geo->Dimension();
std::string objDimStr = objDim;
objDimStr += std::to_string(objDimension);
std::cout << objDimStr << std::endl;
0
serge 20 nov. 2018 à 12:45