在类构造函数中初始化类成员数组?

时间:2011-11-10 22:06:28

标签: c++

这是我的头文件,其中包含我的老师想要在Data的构造函数中初始化的数组Heap

#ifndef HEAP_H
#define HEAP_H

class Heap
{
private:
    int Data [100];
    int Parent(int);
    int RightChild(int);
    int LeftChild(int);
    void Heapify(int*, int);
    void BuildHeap(int*);

public:
    Heap();
    void insert(int*);
    void HeapSort(int*);
    void ExtractMaximum(int*);
    int Maximum(int*);
    void PrintHeap(int*);
    int heapsize;
    int* GetData();
};

#endif

构造函数在这里:

Heap::Heap()
{
    Data = {4, 12, 3, 19, 23, 5, 32, 11, 2, 24}; 
    heapsize = 10;
    BuildHeap(Data); //build a heap with initial values
}

每当我使用构造函数中的第一行代码运行代码时,初始化数组,我会收到以下警告:

  

警告:扩展初始值设定项列表仅适用于-std=c++0x-std=gnu++0x

显然我做错了,这是我对此代码唯一的错误/警告,当我拿走初始化Data的代码行时它会运行。

3 个答案:

答案 0 :(得分:2)

如果你只能使用C ++ 03,那么我会选择这种方法:

#include <algorithm>

Heap::Heap()
  : Data() // value-initialize Data so initial elements are 0 instead of random
  , heapsize(10) // initialize here instead of constructor body for consistency
{
    static int const initData[] = { 4, 12, 3, 19, 23, 5, 32, 11, 2, 24 };
    std::copy(initData, initData + sizeof(initData) / sizeof(initData[0]), Data);
    BuildHeap(Data); //build a heap with initial values
}

如果 允许使用C ++ 11功能,那么您所拥有的内容或多或少都很好,您只需要实际通知编译器您打算使用C ++ 11功能(-std=c++0x)。

答案 1 :(得分:0)

看看这里:http://en.wikipedia.org/wiki/C%2B%2B11#Initializer_lists

这没关系,警告只是告诉您正在使用新的C ++功能,但在命令行中没有告知编译器。编译器希望您在命令行上告诉他您的代码是按照新的C ++标准编写的。

答案 2 :(得分:0)

您尝试在创建变量后一次为变量分配初始值设定项列表。正如错误消息所指出的那样,直到最近才对C ++进行了更改批准,很可能是在编译器创建之后。

您真的想要在您的班级中安装一组固定的数据,这是值得怀疑的。更常用的方法是将数据作为参数传递给构造函数。创建对象的代码将具有一个在示例中初始化的数组,并将该数组传递给构造函数。构造函数会复制。