警告:一般来说,对C ++和编码的了解非常有限。请不要使用高级术语。
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和answer是字符串。
当我运行程序时,我发布的第三行有一个编译时错误:
invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]
有什么问题?我该如何解决?带有此错误的所有其他帖子都谈到了指针字符,但我不知道它们是什么。
答案 0 :(得分:3)
指针字符是用C和C ++实现普通字符串的方式。在C ++中,你有一个很好的类std::string
,但字符串文字仍然是字符数组。 C和C ++中的数组可以看作是指针。
例如,"hello"
的类型为const char[6]
(5个字符加上结尾的NUL),但它可以简单地转换为const char *
,然后可以转换为{ {1}}。
在第3行中,唯一相关的代码是对成员函数std::string
的调用。这个函数有很多覆盖(要使用不同的参数集),但编译器试图使用的是这一个:
std::string::replace()
如您所见,它需要两个数字和一个string& replace (size_t pos, size_t len, const char* s);
(旧字符串/字符数组)。但是您传递的是const char *
类型的第三个参数answer.at(i)
。因此错误:
char
解决方案?您可以从该char构建一个字符串:
invalid conversion from ‘char’ to ‘const char*’
或者您可以获取原始字符串的子字符串而不是普通字符。
answerDisplay.replace( (2 * i), 1, std::string(1, answer.at(i))