gpt4 book ai didi

c++ - 警告#411 : class foo defines no constructor to initialize the following:

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:54 25 4
gpt4 key购买 nike

我有一些用 C++ 编译器构建的遗留代码,在主题行中给出了错误

typedef struct foo {
char const * const str;
} Foo;

代码中的很多地方(意味着我无法更改所有这些地方)在 C 样式初始化中使用它:

 Foo arr[] ={
{"death"},
{"turture"},
{"kill"}
}

删除愚蠢警告的好的解决方法是什么?

最佳答案

const 指针构造后不能再修改。您需要一个构造函数初始化程序来初始化“str”。

struct Foo
{
const char* const str;
explicit Foo(const char* str_) : str(str_) {}
};

请注意,对于这种情况,C++ 中不需要“typedef”。

编辑:

如果你不能使用构造函数,那么你必须使你的指针成为非常量:

struct Foo
{
const char* str;
};

另一个编辑:

在 litb 的评论之后,我尝试了原始代码,它确实可以编译(g++ 4.1.2 和 XL C/C++ 8.0)而没有任何警告。在这种情况下,可能有问题的编译器正在做一个构造然后赋值?我使用了不太暴力的琴弦,但我怀疑这会有所作为。 ;v)

关于c++ - 警告#411 : class foo defines no constructor to initialize the following:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1607357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com