【问题标题】:static int array in a class problem类问题中的静态 int 数组
【发布时间】:2011-08-21 23:57:57
【问题描述】:

以下3个代码块分别是main.cpp、static_class_array.cpp、static_class_array.h。我收到以下错误:

static_class_array.cpp||In constructor 'static_array_class::static_array_class()':|
static_class_array.cpp|5|error: cannot convert '<brace-enclosed initializer list>' to 'int' in assignment|
||=== Build finished: 1 errors, 0 warnings ===|


#include "static_class_array.h"

int main()
{
    static_array_class* array_class;

    array_class = new static_array_class();

    delete array_class;

    return 0;
}


#include "static_class_array.h"

static_array_class::static_array_class()
{
    static_array_class::array[3] = {0,1,2};
}
static_array_class::~static_array_class(){}



#ifndef STATIC_CLASS_ARRAY_H
#define STATIC_CLASS_ARRAY_H

class static_array_class
{
    private:

        static int array[3];

    public:

    static_array_class();
    ~static_array_class();
};
#endif

【问题讨论】:

    标签: c++ arrays static


    【解决方案1】:

    我认为你想要的实现文件是:

        static_array_class::static_array_class()
        {
        }
        static_array_class::~static_array_class(){}
    
        int static_array_class::array[3] = {0,1,2};
    

    错误信息说明

    “无法将'大括号括起来的初始化列表'转换为'int' 任务”

    在提交的代码中。

    这是因为代码:

    static_array_class::array[3] = {0,1,2};
    

    被解释为意味着应该将{0,1,2} 分配给数组中的元素3。元素3 的类型为int,(顺便说一下,没有分配为第四个元素),所以就像:

    int i = 0;
    i = {0,1,2};
    

    因此出现错误消息。

    【讨论】:

    • 告诉我我的声明有冲突。
    【解决方案2】:

    它们不是同一类型;

    你的类是一个包含一个数组的类——其他的只是一个数组。

    对于类成员的静态定义,您需要在类外部声明实际实例,就像任何其他静态一样,

    int static_array_class::array[3] = {0,1,2}; // note this line is outside the constructor
    
    static_array_class::static_array_class()
    {
    }
    static_array_class::~static_array_class(){}
    

    【讨论】:

    • 通过编码当然是可能的——你只需要更多一点——类的静态成员不是在压缩器中而是在类之外初始化的,因为它们实际上并不参与构造/deconstrction -- 几乎可以将它们视为名称空间的一部分,而不是类。
    • 我试过了,然后它告诉我 \static_class_array\static_class_array.cpp|6|undefined reference to `static_array_class::array'|
    • 更新了答案,需要把初始化移到构造函数之外,声明实际的静态成员实例
    猜你喜欢
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2013-04-27
    • 2014-08-27
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多