错误 C2664 和 E0167 被难倒
Errors C2664 and E0167, stumped
我正在参加 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++。
相关文章:
- Visual Studio 2019 / E0167 / "const char"
- C2664 无法从'initializer list'转换参数
- 为什么这个错误变成(C2664错误C ++ Visual Studio)
- 编译方面的问题.错误E0413、E0434、C2664、C2440
- 使用解算器SparseLU并获得错误C2664
- std::映射导致插入时出现C2664错误
- 在Visual Code 2019中使用graphics.h绘制线条时,如何修复错误E0167和C2019?
- VS 2017 错误 C2664 地图插入尝试
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 编译器错误 C2664 使用 std::map 和自定义类作为其值
- 在 sniffer.h libtins 上获取 VS C2664
- 如何在 VC++ 中通过引用传递另一个对象的方法(错误 C2664)
- C2664 :当我使用 str.append(str[i]) 时,发生错误
- C++ WinHttpSendRequest Eror C2664
- 在C++中构造模板函数时出现编译错误 C2664 和 C2440
- 了解错误 C2664:无法转换参数 1
- 错误 C2664:无法从'NvPhysicalGpuHandle'转换参数 1
- 错误 C2664 和 E0167 被难倒
- 创建进程使用路径时出现错误事件:类型 "char *" 的 E0167 参数与类型 "LPWSTR" 的参数不兼容
- 尝试创建unique_ptr时出现错误 C2664