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

标签 c++ c

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

相关文章:

c++ - std::string 在 C++11 中是否总是以空值结尾?

c++ - 行为根据它所链接的类而改变的程序

c - 尝试了解 C 中多维动态字段的用法

c++ - 使用哪一个 - memmove() 或 memcpy() - 当缓冲区不重叠时?

c++ - 为什么将 1 个头文件包含到两个 CPP 文件中不会导致重新定义错误?

c++ - 如何区分 C++ 中的隐式/显式构造函数调用?

c++ - 如何在 bool 上下文中使用枚举类?

c - 如何在给定指针数组的情况下创建字符串数组?

c - wait 函数和 wexitstatus 中的状态值

c - 如何在 MATLAB 中加载复杂数据的库?