У меня есть класс, который должен быть только инициализирован определенным образом. Как часть проверки ошибок, у меня есть bool quality
, который я хочу иметь значение по умолчанию, равное нулю, если не будет вызван правильный конструктор (который затем проверяет аргументы, чтобы увидеть, правильно ли он был вызван).Переменные по умолчанию в классе с g ++
class CParameters {
private:
bool quality = 0;
//Plus some additional code
};
дает мне
warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
bool quality = 0;
^
В качестве альтернативы:
class CParameters {
private:
bool quality;
public:
CParameters;
};
CParameters::CParameters
{
quality = 0;
}
дает мне следующую ошибку:
error: declaraion does not declare anything [-fpermissive]
CParameters;
^
Alternatively2:
class CParameters {
private:
bool quality;
public:
CParameters();
bool good();
};
CParameters::CParameters()
{
quality = 0;
}
bool CParameters::good()
{
return quality;
}
и затем вызвать его
CParameters CLI;
CLI.good();
дает эту ошибку:
error: request for member 'good' in 'CLI', which is of non-class type 'CParameters()'
EDIT: Второй вариант является правильным. Причина, по которой CParameters() является неклассовым, заключается в том, что я слишком тупой, чтобы фактически компилировать параметры.cpp при компиляции других файлов.
Обратите внимание на сообщение, которое вы получаете. Это функция C++ 11, которая поддерживается G ++ в режиме C++ 11, поэтому включите режим C++ 11. – hvd
Это будет мое последнее решение, но я помню инициализацию переменных в классах задолго до C++. 11 – medivh
Вы уверены, что то, что вы помните, не инициализирует * статические * переменные в классе? – hvd