为什么在标头中的类声明中声明变量时出现错误?

时间:2012-01-08 23:41:04

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

我正在尝试创建一个包含简单整数的类。当然,它使用头文件和诸如此类的东西。

以下是代码:

class.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中声明一个整数。我到处搜索,我找不到答案。有什么我想念的吗?

3 个答案:

答案 0 :(得分:3)

确实,你无法初始化这样的成员。如果您想将这些初始化为每个实例的默认值,您可以在构造函数中执行此操作:

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

}

答案 1 :(得分:3)

在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中,你必须在构造函数中使用成员inizializers。

答案 2 :(得分:1)

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

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