2015-10-21 7 views
-1

ПРЕДУПРЕЖДЕНИЕ: Чрезвычайно ограниченное знание C++ и кодирование в целом. Пожалуйста, воздержитесь от передовой терминологии.Неверное преобразование C++ из 'char' в 'const char *' [-fpermissive]

for (i = 0; i < answer.size(); ++i) { 
      if (guess == answer.at(i)) {       //to display correct letters in answerDisplay 
       answerDisplay.replace((2 * i), 1, answer.at(i)); 
       correctGuesses += 1; 
      } 

Данные: answerDisplay and answer are strings.

Когда я запускаю свою программу, есть ошибка во время компиляции на третьей линии, что я писал, говоря:

invalid conversion from ‘char’ to ‘const char*’ [-fpermissive] 

В чем проблема? Как я могу это исправить? Все другие сообщения с этой ошибкой говорили о символах указателя, но я не знаю, что это такое.

+0

@Alec Pflaumer Дайте нам весь код с декларациями. –

+0

Как сказал Ричард Рублев, нам сложно определить причину этой ошибки, поскольку само сообщение об ошибке относится к «char» и «const char *», которые представляют собой некоторые типы данных, которые встречаются в вашем коде. Нам нужны эти типы данных. Где-то в вашем коде объявляются «ответ», «догадка», «answerDispla.replace» и «correctGuesses», т. Е. Они упоминаются рядом с типом. Нам нужны эти линии. Кроме того, сообщение об ошибке обычно относится к определенной строке кода. Можете ли вы сказать нам, какой из них? Обычно, конечно, приятно только предоставить нам необходимую нам информацию, но в этом случае нам нужно больше. –

+0

Какой ответ вы ожидаете? –

ответ

3

Символы указателей - это то, что простые строки реализованы на языках C и C++. В C++ у вас есть класс std::string, но строковые литералы по-прежнему представляют собой массив символов. А массивы на C и C++ можно рассматривать как указатели.

Например, "hello" имеет тип const char[6] (5 символов плюс окончание NUL), но она может быть тривиальным образом преобразованы в const char *, и что, в свою очередь могут быть преобразованы в std::string.

В строке 3 единственным релевантным кодом является вызов функции-члена std::string::replace(). Есть много переопределений этой функции (различные наборы параметров, которые будут использоваться), но один компилятор пытается использовать это один:

string& replace (size_t pos, size_t len, const char* s); 

Как вы можете видеть, она принимает два числа и const char * (старая строка/char-array). Но вы проходите как третий параметр answer.at(i), который имеет тип char. Следовательно, ошибка:

invalid conversion from ‘char’ to ‘const char*’ 

Решение? Вы можете создать строку из этого полукокса:

answerDisplay.replace((2 * i), 1, std::string(1, answer.at(i)) 

Или вы можете получить подстроку исходной строки, а не простой характер.

answerDisplay.replace((2 * i), 1, answer.substr(i, 1)) 
+0

Лучше, чем мой пунт на ответ, плюс один. – Bathsheba

Смежные вопросы