【问题标题】:C++ invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]C++ 从‘char’到‘const char*’的无效转换[-fpermissive]
【发布时间】:2016-01-20 01:28:56
【问题描述】:

警告: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]

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

【问题讨论】:

  • @Alec Pflaumer 给我们完整的代码和声明。
  • 正如Richard Rublev所说,我们很难推断出该错误的原因,因为错误消息本身涉及“char”和“const char *”,这是一些发生的数据类型在你的代码中。我们需要这些数据类型。在您的代码中的某处,声明了“answer”、“guess”、“answerDispla.replace”和“correctGuesses”,即它们在类型旁边被提及。我们需要这些线条。此外,错误消息通常是指某一行代码。你能告诉我们,它是哪一个吗?通常,只给我们需要的信息当然是一件好事,但在这种情况下,我们需要更多。
  • 你期待什么样的答案?

标签: c++ char constants compile-time


【解决方案1】:

指针字符是在 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 *(一个旧字符串/字符数组)。但是您将作为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))

【讨论】:

  • 比我的答案要好,加一。
猜你喜欢
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 2014-07-30
相关资源
最近更新 更多