我有以下功能。我需要为详细级别设置一个通用值。 错误:Iso C ++禁止隔离。我是否需要通过构造函数来实现此目的?
是, 我试过了,它就像这样工作
arche()
{
verbosity_ = 1;
}
但我记得C ++有默认成员值的特殊语法。这可能是我应该使用的。它是什么?
class test
{
protected:
short verbosity_=1; // this does not work
public:
void setVerbosity(short v)
{
if((v==0 || v==1))
{
verbosity_ = v;
}
else
{
cout << " Verbosity Level Invalid " << endl;
}
}
virtual void runTest() = 0;
};
答案 0 :(得分:4)
你可以在构造函数中执行它,但是你不需要赋值,你可以使用这样的初始化语法:
test::test() : verbosity_(1)
{
}
答案 1 :(得分:3)
在C ++ 98和2003中你不能这样做;你必须通过构造函数来完成它。
在最新的标准C ++ 11中,您可以使用您正在尝试的语法。
答案 2 :(得分:2)
在C ++ 03中,您需要在构造函数中初始化short成员。
作为(有限的)解决方法,以下内容适用于整数类型:
template <class T, T value>
struct defaulted
{
T val_;
defaulted(): val_(value) {} //by default initializes with the compile-time value
defaulted(T val): val_(val) {}
operator T() const { return val_; }
};
class test
{
protected:
defaulted<short, 1> verbosity_;
public:
void setVerbosity(short v)
{
if((v==0 || v==1))
{
verbosity_ = v;
}
else
{
cout << " Verbosity Level Invalid " << endl;
}
}
virtual void runTest() = 0;
};
答案 3 :(得分:1)
在C ++ 98和C ++ 03中,may only初始化static const
个成员。
struct T {
int x = 3;
};
int main() {
T t;
std::cout << t.x;
}
// prog.cpp:4: error: ISO C++ forbids initialization of member ‘x’
// prog.cpp:4: error: making ‘x’ static
// prog.cpp:4: error: ISO C++ forbids in-class initialization of non-const static member ‘x’
struct T {
static const int x = 3;
};
int main() {
T t;
std::cout << t.x;
}
// Output: 3
否则您must使用ctor-initialiser:
struct T {
int x;
T() : x(3) {}
};
int main() {
T t;
std::cout << t.x;
}
// Output: 3
但是在C ++ 11中,可以为内置类型执行此操作: