错误 C2664 和 E0167 被难倒

Errors C2664 and E0167, stumped

本文关键字:E0167 C2664 错误      更新时间:2023-10-16

我正在参加 c++ 初学者的远程课程,无法解决此编译错误。它的编写方式与示例书中的完全相同,当我兄弟将其剪切并粘贴到他的 VS2015 中时,它工作正常,但在我的 VS2017 中则不然。 我已经卸载并重新安装了VS2017社区,但无济于事。

我只编码了 2 周,所以我对此非常非常陌生。

我得到的错误代码是:

错误E0167类型为"const char"的参数与类型为"char 错误C2664'void Hello(char )'"的参数不兼容:无法将参数 1 从"const char [8]"转换为"char
">

代码:

// FUNCTION: Hello, prints out a welcome message on the screen.
void Hello(char* name)
{
cout << "Hello " << name << "!";
}
// FUNCTION: Main, program start.
int main()
{
Hello("Krister");
cin.get();
return 0;
}

我真的希望有人可以帮助我。

万事如意, 杰普

字符串文字可以由const char*引用。

它可能不会被char*引用;这在旧版本的C中是可能的,一些旧的C++编译器允许它并发出警告。在现代,它是完全禁止的。

通过将"Krister"传递给一个采用char*的函数,你要求编译器尝试将一个转换为另一个;由于上述规则,它失败了,正如错误消息所证明的那样。

在那里放一个const,以获得巨大的成功。

如果该代码来自教科书,请丢失它。以下是一本好C++书的清单。

只是为了补充轨道上的轻盈竞赛的答案,它描述了你绝对应该做的事情。VS2015 和 VS2017 差异的原因是后者默认关闭/permissive标志,与前者不同。

这意味着VS2017很可能会拒绝"你兄弟的"VS2015接受的代码,除非项目选项被修改。

我建议您将标志保持在关闭状态。严格符合是好的,它让你养成更好的习惯,写出更便携的C++。