【问题标题】:Warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [duplicate]警告:非静态数据成员初始化器仅适用于 -std=c++11 或 -std=gnu++11 [重复]
【发布时间】:2019-04-14 17:12:26
【问题描述】:

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

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++11 或更高版本编译,要么将 countHight 的初始化移到构造函数中
  • 您可以添加 -std=c++11 编译器选项作为警告消息的建议。如果您不想这样做,请改为在构造函数中设置 countHight=0。
  • 请了解如何format code in posts properly

标签: c++ compiler-warnings


【解决方案1】:

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

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

对此有两种解决方案,如 cmets 中所述,您可以简单地告诉编译器使用允许这种初始化方法的 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); 
};

【讨论】:

    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多