我正在尝试初始化一个类变量数组。据我了解,正常的类变量初始化是这样工作的:
class test
{
public:
static const float f;
};
但是,作为一个数组,突然就不行了:
class test
{
public:
static const float f[2];
};
//const float test::f = { 1 ,2};
整个代码应该可以运行,但我注释掉了第 6 行。在第 4 行,它仍然抛出
Error LNK2001 unresolved external symbol "public: static float const * const test::f"
我试过指针和动态分配,两者都不起作用。我该如何修复这个错误,第 6 行有什么问题吗?
最佳答案
说明
static
test::f
表示 f
未绑定(bind)到 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
, initializer list , 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];
}
关于c++ - 在 C++ 中初始化类变量 float 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55386629/