gpt4 book ai didi

c++ - 初始化私有(private)成员静态常量数组

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:53 26 4
gpt4 key购买 nike

class MyClass
{
public:
...
private:
enum class BDTNodeType : unsigned char
{
NT_TERMINAL_ZERO,
NT_TERMINAL_ONE,
NT_TERMINAL_X,
NT_NOT_TERMINAL
};

class BDTNode
{
public:
explicit BDTNode(BDTNodeType node_type = BDTNodeType::NT_NOT_TERMINAL);
BDTNode(const BDTNode &node);
~BDTNode();

BDTNodeType type;
BDTNode *thenPtr; //1
BDTNode *elsePtr; //0
};

BDTNode *root_node;

//Constant nodes
static const BDTNode fv_nodes[3] = {
BDTNode(BDTNodeType::NT_TERMINAL_ZERO),
BDTNode(BDTNodeType::NT_TERMINAL_ONE),
BDTNode(BDTNodeType::NT_TERMINAL_X)
};
};

我想直接在类声明中初始化 static const BDTNode fv_nodes 数组,因为 C++11 允许这样做。但是我得到“C2864:'MyClass::fv_nodes':具有类内初始化程序的静态数据成员必须具有非 volatile 常量积分”。而且我无法在类外初始化它,因为在那种情况下“BDTNode”类将无法访问。那么我应该怎么做呢?

最佳答案

C++11 allows to do this

不,C++11 不允许这样做。您可能会想到非静态成员初始化器,它可以作为构造函数中初始化的替代方法。

对于静态成员,规则没有太大变化。类内声明不是定义,除非它是非 volatile const 整数或枚举类型且未被 ODR 使用,否则它需要类外的单个定义。如果您提供了一个初始化程序,那将继续定义。

And I can't initialize it outside class, because in that case "BDTNode" class would be inaccessible.

不,初始化器在类的范围内,所以私有(private)名称是可访问的。以下works for me :

// in class
static const BDTNode fv_nodes[3];

// in a source file
const MyClass::BDTNode MyClass::fv_nodes[3] = {
BDTNode(BDTNodeType::NT_TERMINAL_ZERO),
BDTNode(BDTNodeType::NT_TERMINAL_ONE),
BDTNode(BDTNodeType::NT_TERMINAL_X)
};

关于c++ - 初始化私有(private)成员静态常量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com