在C++中初始化类变量浮点数组
Initialize class variable float array in C++
我正在尝试初始化一个类变量数组。据我了解,正常的类变量初始化是这样的:
class test
{
public:
static const float f;
};
但是,作为一个数组,它突然不起作用:
class test
{
public:
static const float f[2];
};
//const float test::f = { 1 ,2};
整个代码应该可以工作,但我注释掉了第 6 行。在第 4 行,它仍然扔了
错误LNK2001未解析的外部符号"public:静态浮点常量 * 常量测试::F">
我尝试了指针和动态分配,两者都不起作用。如何修复此错误,第 6 行有问题吗?
解释
static
test::f
意味着f
不绑定到类实例test
。换句话说,只有一个单一的f
就像test
namespace
,而不是class
。只有一个而且正好有一个f
.
注意
另外,您忘记添加必须在编译时给出的数组f
大小。您也可以始终使用decltype
说明符,该说明符将自动为您提供正确类型的成员。
基本示例
#include <iostream>
class test
{
public:
static const float f[2];
};
decltype(test::f) test::f = {1, 2};
int main(){
// Outputs: 1, 2
std::cout << test::f[0] << ", " << test::f[1];
}
现代示例
更现代的解决方案将使用std::array
、初始值设定项列表、auto
占位符类型说明符和constexpr
说明符。在这种情况下,您根本不需要提供数组大小。
#include <iostream>
#include <array>
class test
{
public:
static constexpr auto f = std::array {1.f, 2.f};
};
int main(){
// Outputs: 1, 2
std::cout << test::f[0] << ", " << test::f[1];
}
正如@NathanOliver所说,您可以在类之外将大小添加到初始化中:
class test
{
public:
static const float f[2];
};
...
const float test::f[2] = {1, 2};
或者,您也可以使用 constexpr
并在类本身中声明数组:
class test
{
public:
static constexpr float f[2] = {1, 2};
};
相关文章:
- 合并排序不排序自创建数组类 c++
- 数组类 阵列的打印输出
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- 使用数组类返回数组c++
- 重写自定义数组类的运算符/开始/结束
- 创建 2D 数组类:如何访问 2D 数组类(如 array[x][y))中的元素
- 数组的变量名和该数组的地址有什么区别?
- 在循环中更改数组的变量不起作用
- 可容纳二维对象数组的变量
- 标准::数组类上的堆栈溢出
- 将数组类转换为模板
- 是否可以在不为该数组创建变量的情况下将数组作为参数传递到函数中?
- 初始化const 3D数组成员变量
- 通过drived类模板值通过基类构造器初始化基类数组成员变量
- 如何创建指向数组类成员的指针?
- 模拟递归定义的类似数组类的聚合初始化
- 带有非默认构造类型的填充性std ::数组(无变量模板)
- 使用 [][] 运算符更改通用 2D 数组类的值
- 静态数组类变量"multiple definition" C++