error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]

2020-06-14 18:39:03 +08:00
 XIVN1987
《 C++ Crash Course 》上有个例程如下:
``` c++
struct JohanVanDerSmut
{
bool gold = true;
int year_of_smelting_accident{1970};
char key_location[8] = {"x-rated"};
};
```

我编译后程序报错:
error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
char key_location[8] = {"x-rated"};
^

是编译器版本的问题吗??我用的是 gcc 5.4
2242 次点击
所在节点    C++
8 条回复
wssy
2020-06-14 18:55:59 +08:00
这段代码应该是没有问题的,得参考下 cppreference 中的 copy-initialization 。
我看下资料才行。

你开启 c++11 了吗?
Chihaya0824
2020-06-14 19:05:12 +08:00
char key_location[8] = {'x-rated'};试试?
Chihaya0824
2020-06-14 19:05:59 +08:00
@Chihaya0824 RE #2 我傻了()肯定不对的
wssy
2020-06-14 19:10:00 +08:00
刚刚看了,这个是 aggregate-initialization 的一种特例,就算 11 以前也是支持的。
你看看是不是前面某些地方出了些错误,导致后面连着错。。。
msg7086
2020-06-15 08:43:52 +08:00
int main() { std::cout << __cplusplus << std::endl; }

GCC 5.4 = 199711 = C++98

可以看这里 https://gist.github.com/ax3l/53db9fa8a4f4c21ecc5c4100c0d93c94

建议还是不要用 22 年前的标准来跑了。
XIVN1987
2020-06-15 09:09:13 +08:00
@msg7086

我加了 -std=c++14 选项的,,不加这个选项会报下面的警告

warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
msg7086
2020-06-15 09:14:19 +08:00
@XIVN1987 我用 G++尝试编译了,C++11/14/17/2x 都能过。

你可以把比较完整的源码贴到 gist,连带你编译的命令一起贴出来看看。
XIVN1987
2020-06-15 10:29:19 +08:00
@msg7086

感谢,,用新版编译器编译确实没问题了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/681478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX