这是我的头文件,其中包含我的老师想要在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
的代码行时它会运行。
答案 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 ++进行了更改批准,很可能是在编译器创建之后。
您真的想要在您的班级中安装一组固定的数据,这是值得怀疑的。更常用的方法是将数据作为参数传递给构造函数。创建对象的代码将具有一个在示例中初始化的数组,并将该数组传递给构造函数。构造函数会复制。