C++访问静态 constexpr 数组
C++ access static constexpr array
我正在尝试从另一个类中声明的数组中获取一些值。数组具有固定的长度和常量元素(我将 100% 永远不会修改其值,所以这就是我让它常量的原因(。
但是,当我尝试访问main
函数中的第一个元素时,出现编译错误:
basavyr@Roberts-MacBook-Pro src % g++ -std=c++11 main.cc
Undefined symbols for architecture x86_64:
"Vectors::vec1", referenced from:
_main in main-c29f22.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1
如您所见,我正在使用clang(最新版本(在macOS Catalina上进行编译。
[Q]:可能是什么问题? 提前谢谢你。
这是代码:
#include <iostream>
class Dimension
{
public:
static constexpr int dim1 = 2;
static constexpr int dim2 = 1;
};
class Vectors
{
public:
static constexpr double vec1[2] = {4.20, 6.9};
};
int main()
{
auto a = Vectors::vec1[0]; //I also tried initializing this to a value rather than just accessing it directly through the class like I did below
std::cout << a << "n";
std::cout << Vectors::vec1[0] << "n";
return 0;
}
您正在 C++11 模式下编译;您需要在命名空间范围内为这些constexpr
static
成员提供定义。请注意,自 c++17 以来,这不是必需的。
如果使用 odr
non-inline (since C++17)
静态数据成员or a constexpr static data member (since C++11)
const 则仍然需要在命名空间范围内定义,但它不能具有初始值设定项。This definition is deprecated for constexpr data members (since C++17)
.
例如
class Dimension
{
public:
static constexpr int dim1 = 2;
static constexpr int dim2 = 1;
};
constexpr int Dimension::dim1;
constexpr int Dimension::dim2;
class Vectors
{
public:
static constexpr double vec1[2] = {4.20, 6.9};
};
constexpr double Vectors::vec1[2];
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何将临时 C 数组传递到 constexpr 容器中
- 任意大小的 constexpr 数组是否可以用作 switch 语句中的案例?
- C++:初始化 constexpr 构造函数中的成员数组
- C++访问静态 constexpr 数组
- 在 constexpr 构造函数中初始化数组是否合法?
- 从非类型模板参数声明 constexpr 数组的可移植方法
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- 正在初始化函数指针的constexpr数组
- constexpr数组初始化
- 类本身内部的类对象的静态constexpr数组
- const(但不是constexpr)用作内置数组大小
- 使用模板函数初始化 constexpr 数组
- 用另一个 constexpr 数组对成员数组进行大括号初始化
- C++ constexpr:在编译时计算标准数组
- 如何将constexpr数组传递到函数中
- 将`constexpr`与数组初始化