【问题标题】:How to initialize a constant in a class? [duplicate]如何初始化类中的常量? [复制]
【发布时间】: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


【解决方案1】:

错误:

class A
{
public:
    const int x=8; // error (c++98/03)
};

修复 1

class A
{
public:
    const int x;

    A() : x(8)  // ok
    { }
};

修复 2

class A
{
public:
    const static int x;
};

const int A::x=8; // ok

【讨论】:

  • 您的原始代码不应导致错误,除非您使用的是 c++98/03。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
相关资源
最近更新 更多