C++ 在C+中初始化类变量浮点数组+;

C++ 在C+中初始化类变量浮点数组+;,c++,arrays,class,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行,它仍然抛出 错误LNK2001未解析外部符号“公共:静态

我正在尝试初始化一个类变量数组。据我所知,普通类变量初始化的工作原理如下:

class test
{
public:
    static const float f;
};
但是,作为一个数组,它突然不起作用:

class test
{
public:
    static const float f[2];
};
//const float test::f = { 1 ,2};
整个代码应该可以运行,但是我注释掉了第6行。在第4行,它仍然抛出

错误LNK2001未解析外部符号“公共:静态浮点常量”* 常量测试::f“


我尝试了指针和动态分配,两者都不起作用。如何修复此错误,第6行是否有问题?

正如@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};                                   
};

正如@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};                                   
};
解释
test::f
表示
f
未绑定到
test
类实例。换句话说,只有一个单独的
f
,就像
test
namespace
,而不是
class
。只有一个且正好有一个
f

注 另外,您忘了添加
f
数组的大小,这必须在编译时给出。 您还可以始终使用说明符自动为您提供正确类型的成员

基本示例 解释
test::f
表示
f
未绑定到
test
类实例。换句话说,只有一个单独的
f
,就像
test
namespace
,而不是
class
。只有一个且正好有一个
f

注 另外,您忘了添加
f
数组的大小,这必须在编译时给出。 您还可以始终使用说明符自动为您提供正确类型的成员

基本示例
看起来你忘了尺码。Try
const float test::f[2]={1,2}首先,变量F是常量,这意味着您不能执行F[0]=value或F[1]=value,它是只读变量,因此您必须首先初始化它,其次,您不能访问类obj变量,如常量float test::F={1,2},但只能测试:{1,2};看这里,你好像忘了尺寸。Try
const float test::f[2]={1,2}首先,变量F是常量,这意味着您不能执行F[0]=value或F[1]=value,它是只读变量,因此您必须首先初始化它,其次,您不能访问类obj变量,如常量float test::F={1,2},但只能测试:{1,2};检查这里,