【问题标题】:How to define a static member of a class in the function?如何在函数中定义类的静态成员?
【发布时间】:2012-03-19 14:19:04
【问题描述】:

这里有:

class X {

public:
    static int shared_arr[];
    static void alloc_and_init() {

        // Since any static variables defined in the function are allocated some space.
        // So can I define X::shared_arr here (using the space the static variable for X::shared_arr)? 
        // I think it would be a convenient way to make an approach of some basic memory allocation and initialization.
    }

};

【问题讨论】:

  • 您可能应该花一些时间阅读一本关于 C++ 的好书。您的 shared_arr 成员缺少类型,[] 作为数组修饰符提供了一个不完整的类型,无法在类定义中使用。从更广泛的角度来看,几乎可以保证对于您要解决的任何问题都有更好的解决方案。
  • @KerrekSB:该成员是static 成员。我相信您实际上可以在成员的声明中使用不完整的类型。
  • @KerrekSB 对不起。我忘记输入了。
  • @DavidRodríguez-dribeas:哦,很好,我没想到这一点——有道理。

标签: c++ static-methods static-members


【解决方案1】:

不,您必须在一个 cpp 文件中以及在任何函数之外定义它。

int X::shared_arr[MAX_SIZE] = {0};
^^^

请注意,您缺少数组类型。

【讨论】:

  • 我很困惑。函数内部的静态变量看起来就像外部的一样(范围区域除外)。
  • @ymfoi:范围解析运算符告诉编译器您正在初始化的数组是类成员。
  • 我的意思是函数内部的静态变量看起来很像全局变量。所以我想知道我是否可以在函数静态变量中做到这一点。
  • @ymfoi:我刚刚回答,你不能。如果允许,考虑一下场景,如果函数被定义但从未被调用会发生什么?当静态成员在其他地方使用时会发生什么,它是否被定义?它的状态是什么?
  • Thx.. 有更好的方法来满足我的需要吗?
猜你喜欢
  • 1970-01-01
  • 2012-12-20
  • 2011-03-02
  • 2017-10-20
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多