【问题标题】:Why do I get cannot convert from const char[5] to char* in VS?为什么我无法在 VS 中从 const char[5] 转换为 char*?
【发布时间】:2018-12-02 18:17:24
【问题描述】:
char* f() {
   cout << b;
   return "B::f";
}

好的,所以我在一个类中有这段代码,我一直收到这个错误

'return': cannot convert from 'const char [5]' to 'char*'

我尝试了一些在线编译器,效果很好。

那么为什么会这样呢?

【问题讨论】:

  • "B::f" 的类型为 const char * - 显然与您的函数返回的类型不同 (char *)。另外,你为什么不使用std::string
  • 感谢您的回答!我是信息学专业的学生,​​我不太习惯正确使用 std ,我只是使用 using namespace std;在代码的开头。 f() 也是一个虚函数“virtual char* f() = 0;”并将其更改为 const char * 会给我一个错误。我只是想知道为什么这只发生在 VS 中。在我尝试过的任何其他编译器中,它都可以正常工作。该任务要求我使用给定的虚拟功能。
  • 启用所有警告,您会看到所有编译器都在抱怨。和using namespace std is not a good practice
  • 查看stackoverflow.com/a/7440203/6414842 以更好地解释为什么会发生这种情况。
  • 您严重破坏了错误消息。固定匹配sn-p,验证编辑是否良好。不,C++ 禁止将字符串文字(也称为 const char[])转换为 char[] 或 char*,这是违反 const 的。 C 确实允许它出于历史原因。

标签: c++ visual-studio


【解决方案1】:

这个函数的返回类型表示它指向的存储是可以改变的。但是,您返回一个不允许修改的文字。

将签名改为

const char* f();

它会起作用的。

【讨论】:

    猜你喜欢
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多