我正在尝试创建一个包含简单整数的类。当然,它使用头文件和诸如此类的东西。
以下是代码:
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中声明一个整数。我到处搜索,我找不到答案。有什么我想念的吗?
答案 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)
如果您要初始化固定值,请将buffersize1
和buffersize2
声明为static const
。否则,如果您希望变量对于每个类的实例都是本地的,请在构造函数中初始化它们。
显然C ++ 0x / C ++ 11允许使用上面的代码,但是我个人个人仍然希望在构造函数中一起初始化实例变量。