C ++从'char'无效转换为'const char *'[-fpermissive]

时间:2015-10-21 06:50:45

标签: c++ char const compile-time

警告:一般来说,对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]

有什么问题?我该如何解决?带有此错误的所有其他帖子都谈到了指针字符,但我不知道它们是什么。

1 个答案:

答案 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))