C++ 在结构初始化期间出现奇怪的错误,里面有一个数组

标签 c++

我尝试编译非常简单的代码:

struct T {
    int a[3];
    int b;
    int c;
};

int main() {
    const int as[3] = { 5, 6, 7, };
    const T t {
        as, 2, 3,
    };
    return 0;
}

但它给了我非常奇怪的错误:

t.cpp: In function 'int main()':
t.cpp:11:5: error: array must be initialized with a brace-enclosed initializer
     };
     ^

据我了解,编译器希望我在一个地方初始化所有内容。如何分别初始化字段,然后在初始化结构时使用它们?

最佳答案

数组既不能复制构造也不能复制赋值。如果您可以访问 C++11 和更新版本,则可以使用 std::array

#include <array>

struct T {
    std::array<int, 3> a;
    int b;
    int c;
};

int main() {
    const std::array<int,3> as = { 5, 6, 7, };
    const T t {
        as, 2, 3,
    };
    return 0;
}

否则,您将不得不滚动循环并单独复制元素。

关于C++ 在结构初始化期间出现奇怪的错误,里面有一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46212366/

相关文章:

c++ - Qt-如何在不兼容的信号和插槽之间使用连接

c++ - 了解 Visual Studio 2010 中的监 window 口

c++ - 是否可以连接到 QApplication 通知信号?

c++ - 无法从包含 2 列的 txt 文件中读取整数 (C++)

c++ - C++是上下文无关的还是上下文相关的?

c++ - 成对集合的迭代器是常量?

c++ - 如果在声明类型之前引用了类型,如何在 Xtext IDE 中显示错误

c++ - 无法检测浏览器窗口中的点击以触发功能

c++ - 返回值优化 (RVO) 不是错误吗?

c++ - 在应用程序中包含所有头文件