首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类内的C++静态常量数组初始化

类内的C++静态常量数组初始化
EN

Stack Overflow用户
提问于 2021-03-01 03:36:45
回答 2查看 80关注 0票数 4

我想创建一个常量和静态整数数组作为公共类变量。定义它并立即初始化它是很巧妙的。有关完整的示例,请参阅下面的代码。

代码语言:javascript
运行
复制
#include <iostream>

class Foo {
public:
    constexpr static int arr[3][2] = {
            {1, 2},
            {3, 4},
            {5, 6}
    };
};

int main() {
    for (int i = 0; i < 3; i++) {
        std::cout << "Pair " << Foo::arr[i][0] << ", " << Foo::arr[i][1] << std::endl;
    }
    return 0;
}

但是,使用g++ --std=c++11 test.cpp编译上面的代码会产生

代码语言:javascript
运行
复制
/usr/bin/ld: /tmp/ccc7DFI5.o: in function `main':
test.cpp:(.text+0x2f): undefined reference to `Foo::arr'
/usr/bin/ld: test.cpp:(.text+0x55): undefined reference to `Foo::arr'
collect2: error: ld returned 1 exit status

这在C++中是不可能的吗?更有可能的是,我遗漏了一些关于C++及其静态变量初始化策略的内容。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-01 04:05:56

在C++17 (如C++11和C++14)之前,您必须添加

代码语言:javascript
运行
复制
constexpr int Foo::arr[3][2];

在类的主体之外。

票数 6
EN

Stack Overflow用户

发布于 2021-03-01 04:00:01

编译器错误是由于C++11标准造成的。

通过编译上面的代码来使用C++17标准

代码语言:javascript
运行
复制
g++ --std=c++17 test.cpp

不会产生错误。

编辑:这个解决方案适用于C++17,而不是我最初提出的问题中的C++11。有关C++11解决方案,请参阅接受的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66413131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档