【问题标题】:Why am I getting an error when declaring a variable in a class declaration within a header?为什么在标头中的类声明中声明变量时出现错误?
【发布时间】:2012-01-08 23:41:03
【问题描述】:

我正在尝试创建一个包含简单整数的类。当然,它使用头文件等等。

代码如下:

类.h

 class consolBuf
{
private:
    int buffersize1 = 10; //Data member initializer is not allowed
    int buffersize2 = 10;
    static char screenBuffer[10][10]; //screenBuffer
public:
    consolBuf(void);
    ~consolBuf(void);
    void draw();
    void write(int x, int y);
    char get(int x, int y);
};

出于某种原因,Visual Studio 一直抱怨我无法在 class.h 中声明整数。我到处搜索,但找不到答案。我有什么遗漏吗?

【问题讨论】:

  • 谁告诉你它应该是可能的?
  • @KerrekSB 它“应该”是可能的,因为当前的 C++ 标准允许这样做。这是不可能的,因为当前的 C++ 标准相当新,据我所知,目前还没有完整的实现。

标签: c++ visual-studio-2010 class compiler-errors


【解决方案1】:

确实,您不能像那样初始化成员。如果你想将它们初始化为每个实例的默认值,你可以在构造函数中这样做:

consolBuf::consolBuf()
    : buffersize1(10)
    , buffersize2(10)
{

}

【讨论】:

  • 谢谢,这就是我想要的,我需要变量的原因是因为我希望人们能够更改缓冲区大小。
【解决方案2】:

在 C++03 中,只能在类内部定义静态常量值。但是,在您的情况下,这似乎就是您所需要的:

class consolBuf
{
private:
    static int const buffersize1 = 10; //Data member initializer is now allowed
    static int const buffersize2 = 10;
    static char screenBuffer[buffersize1][buffersize2]; //screenBuffer
public:
    consolBuf(void);
    ~consolBuf(void);
    void draw();
    void write(int x, int y);
    char get(int x, int y);
};

请注意,在 C++11 中,您的原始代码是允许的。因此,如果您的原始代码确实是您想要的,您可能需要做的就是启用 C++11 功能。在 C++03 中,您必须在构造函数中使用成员初始化器。

【讨论】:

    【解决方案3】:

    如果要初始化固定值,请将buffersize1buffersize2 声明为static const。否则,如果您希望变量对于类的每个实例都是本地的,请在构造函数中对其进行初始化。

    显然 C++0x/C++11 允许您使用上述代码,但是我个人仍然更喜欢在构造函数中一起初始化实例变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多