Почему я получаю сообщение об ошибке при объявлении переменной в объявлении класса в заголовке? - PullRequest
3 голосов
/ 09 января 2012

Я пытаюсь создать класс с простым целым числом. Конечно, он использует заголовочные файлы и еще много чего.

Вот код:

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 ]

3 голосов
/ 09 января 2012

В 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 вместо этого вам придется использовать inizializer членов в конструкторе.

3 голосов
/ 09 января 2012

На самом деле вы не можете инициализировать таких участников. Если вы хотите инициализировать их как значения по умолчанию для каждого экземпляра, вы должны сделать это в конструкторе:

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

}
1 голос
/ 09 января 2012

Если вы хотите инициализировать фиксированные значения , объявите buffersize1 и buffersize2 как static const.В противном случае, если вы хотите, чтобы переменные были локальными для каждого экземпляра класса, инициализируйте их в конструкторе.

Очевидно, что C ++ 0x / C ++ 11 разрешает код выше, однако я бы лично все еще предпочитает, чтобы переменные экземпляра инициализировались все вместе в конструкторе.

...