Я получаю ошибку времени компиляции при добавлении строки в const char * в C ++? - PullRequest
0 голосов
/ 20 ноября 2018

, поэтому я пытаюсь преобразовать целочисленное значение в строку, а затем добавить строку к уже существующему константному символу *.Но, как уже упоминалось, я получаю эту ошибку:

ошибка: выражение должно иметь целочисленный или незаданный тип enum.

 objDim += objDimStr.c_str();

Есть идеи, почему?Мой код выглядит следующим образом:

    const char* objDim = "The object dimension is: ";
    int objDimension = geo->Dimension();
    std::string objDimStr = std::to_string(objDimension);
    objDim += objDimStr.c_str();

Ответы [ 4 ]

0 голосов
/ 20 ноября 2018
objDim += objDimStr.c_str();

Здесь вы добавляете один указатель к другому вместо конкатенации строки.Вам нужно использовать std :: string для объединения, например:

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 голосов
/ 20 ноября 2018

objDim это не std::string, а указатель, поэтому ваш оператор конкатенации (+), определенный для std::string, не будет работать на нем.

Определите его как std::string, и вы сможете использовать его для объединения других std::string с.

0 голосов
/ 20 ноября 2018

Полагаю, вы ожидали получить конкатенацию строк.Нет, это не так.objDim - это всего лишь указатель на неизменяемую область памяти, которая содержит символы.Единственное возможное применение оператора += к нему, которое будет компилироваться, это если вы увеличиваете его на несколько символов:

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

Чтобы объединить строки, вы можете:

  1. Либо присвойте результат объекту string:

    std::string result = objDim + objDimStr;
    

    (Обратите внимание на отсутствие c_str в любом месте: вы не можете суммировать два указателя, но есть перегрузка, которая может предшествовать указателю charк std::string.)

  2. или дать правильный тип objDim;

    std::string objDim{"The object dimension is: "};
    objDim += objDimStr;
    
0 голосов
/ 20 ноября 2018

objDim - это указатель .Когда вы добавляете к указателю, вы добавляете к самому указателю и ничего не добавляете к данным, на которые он указывает.

И вы не можете добавить все к указателю, в основном только целочисленные значения.И добавлять два указателя, как вы, вообще не имеет смысла (поэтому это запрещено).

Если вы хотите иметь возможность добавлять строки, используйте std::string для all strings.

Кроме того, необходимость использования спецификатора const также должна давать некоторые подсказки о том, на что указывает указатель constant и, следовательно, не может быть изменена (включаядобавлено в).


И в этом случае вам не нужна никакая временная переменная objDimension или objDimStr (если вы не используете их позже в коде):

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

Здесь сложение работает, потому что есть перегруженная функция operator+ , которая принимает правильные аргументы в правильном порядке и возвращает новый объект std::string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...