警告:非静态数据成员初始化程序仅适用于-std = c ++ 11或-std = gnu ++ 11 [复制]

问题描述 投票:-4回答:1

我可以在main,insert和Display By Level中使用它作为计数器,因为我需要hight或Tree

class BinarySearchTree
{
public:
        Node* root;
        int countHight=0; //in this line
        BinarySearchTree()
        { root = NULL; }
        ~BinarySearchTree() 
        { return; }
        void insert(int value);
        void display(Node* temp);
        void DisplayByLevel(Node* temp,int level); 
};
c++ compiler-warnings
1个回答
0
投票

C ++类定义就像是一个尚不存在的东西的蓝图,因此在您实际创建类的实例之前,没有变量在初始化时设置为零。这就是编译器所抱怨的。

唯一有效的时间是变量被声明为static,但这意味着该类的每个实例都会影响单个static变量。

有两种解决方案,正如评论中所述,您可以简单地告诉编译器使用允许这种初始化方法的C ++ 11标准,或者您可以使用更常见且兼容的方法与较旧的编译器初始化它在构造函数中(正如你已经为root所做的那样),如下所示:

class BinarySearchTree
{
public:
        Node* root;
        int countHight;

        BinarySearchTree()
        {
           root = NULL;
           countHight = 0;
        }

        ~BinarySearchTree() 
        {
          return;
        }

        void insert(int value);
        void display(Node* temp);
        void DisplayByLevel(Node* temp,int level); 
};
© www.soinside.com 2019 - 2024. All rights reserved.