3

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

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

我得到的错误代码是:

“const char”类型的错误E0167参数与“char 类型的参数不兼容
错误C2664 'void Hello(char)': cannot convert argument 1 from 'const char [8]' to '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;
}

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

一切顺利,杰普

4

2 回答 2

8

字符串文字可以由const char*.

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

通过传递"Krister"给函数 take char*,您要求编译器尝试将一个转换为另一个;由于上述规则,它失败了,如错误消息所示。

Chuck aconst在那里取得巨大成功。

如果该代码来自教科书,那就丢掉它这是一个很好的 C++ 书籍列表

于 2018-02-26T11:59:50.187 回答
6

只是为了补充轨道中的 Lightness Races的答案,它描述了你绝对应该做的事情。VS2015 和 VS2017 区别的原因在于后者默认设置了/permissive标志off,与前者不同。

这意味着 VS2017 很可能会拒绝“你兄弟的”VS2015 接受的代码,除非对项目选项进行了修补。

我建议您将标志保持在关闭状态。严格的一致性是好的,它会让你养成更好的习惯并编写更便携的 C++。

于 2018-02-26T12:19:32.363 回答