【发布时间】:2015-10-14 00:56:16
【问题描述】:
所以我环顾四周,到目前为止,我发现没有任何帮助。
我的班级有以下头文件。
#ifndef CONGERA2_H
#define CONGERA2_H
typedef float Element300;
class Stack300
{
public:
Stack300 ();
Stack300 (const int);
Stack300 (Stack300 &old);
~Stack300();
void push300(const Element300);
Element300 pop300();
void viewTB300();
void viewBT300();
private:
const int MAX_STACK;
Element300 * stackArray;
int top;
};
#endif
我正在尝试初始化 MAX_STACK。如果我将它设置为等于某个值,我会收到一个警告,这通常会很好,但之后我必须将此代码传输到 Linux,我不能这样做,因为它说 MAX_STACK 在我的三个构造函数中未定义。我也尝试在我的类函数文件中的第一个构造函数中定义它,但是我得到一个错误,说构造函数中没有定义 MAX_STACK。
如果需要,这是我的类函数的构造函数。
#include <iostream>
#include "congera2.h"
using namespace std;
Stack300::Stack300 (): MAX_STACK(10)
{
stackArray = new float[3];
for (int i = 0; i < 3; i++)
{
stackArray[i] = '\0';
}
top = -1;
return;
}
Stack300::Stack300 (const int size) : MAX_STACK (10)
{
stackArray = new float[MAX_STACK];
for (int i = 0; i < MAX_STACK; i++)
{
stackArray[i] = '\0';
}
top = -1;
return;
}
Stack300::Stack300 (Stack300 &old) : MAX_STACK (10)
{
top = old.top;
int i = 0;
while (top != old.top)
{
stackArray[i] = old.stackArray[i];
i = i + 1;
top = i;
}
}
【问题讨论】:
-
它应该使用构造函数初始化列表工作,就像你现在做的那样。或者,如果使用 C++11,可以直接在标头中,在声明点初始化它。您能发布您收到的确切错误消息吗?
-
如果所有构造函数的值都相同,请在类声明中设置为
static const int MAX_STACK = 10 -
我正在使用 Tera Term 将其传输到 Linux,其中的错误是“错误:未初始化的成员 Stack300::MAX_STACK 具有 const 类型 const int”。在 Code::Blocks (我最初编译代码的地方)我目前没有任何错误,因为我后来添加了 : MAX_STACK (10) 但最初我遇到了与 Tera Term 相同的错误现在。编辑:Rostislav 的解决方案为我解决了这个问题,谢谢!
标签: c++ class initialization constants