c++ - 在 C++ 中初始化类变量 float 数组

标签 c++ arrays class

我正在尝试初始化一个类变量数组。据我了解,正常的类变量初始化是这样工作的:

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,就像 testnamespace 而不是 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/

相关文章:

python - 无法更新 python 类中的属性

c++ - 使用其范围版本从容器中删除元素的最佳方法

c++ - 规范化 opencv idft 调用的输出

arrays - 如何找到 numpy 数组中存在的最大值?

javascript - 从数组中删除最小值,但如果重复只删除一次

java - 在类之间共享变量

c++ - 实现类类型 vector 的元素

c++ - 如何替换给定类型中的模板参数?

c++ - 为什么 Nvenc Encoder 可以提高解码速度?

c - 解决结构数组及其中的 realloc 的一些建议