我有一些用 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/