到目前为止,我已经使用DEFINE来声明我的常量。它完美无缺。
我试图在我的类中使用c ++ const关键字,但它会产生编译时错误
标题
class User{
public:
User::User();
protected:
const float DATA_Z;
}
.CPP
User::User(){
DATA_Z = 0.0023f;
}
这是它产生的错误
错误3错误C2758:'User :: DATA_Z':必须在构造函数base / member初始化列表中初始化
如何为其分配数据,以及如何在课堂上使用它们。
答案 0 :(得分:5)
错误信息非常清楚。将分配移动到初始化列表:
User::User(): DATA_Z(0.0023f)
{
}
答案 1 :(得分:5)
你想这样做:
User::User() : DATA_Z(0.0023f)
{
// body of constructor
}
常量成员需要在初始化列表中初始化,因为它们不能直接分配。对于引用类型的成员也是如此,因为您无法更改引用变量的引用。
答案 2 :(得分:2)
要简单地替换用#define
定义的清单常量,请写全局const
s:
#define DATA_Z 0.0023f
变为
const float DATA_Z = 0.0023f;
将常量放入类中意味着您可以在每个对象中使用不同的值,这就是其他答案告诉您在构造函数中初始化它的原因。这是一个合理的设计决策,但是将该值定义为宏时,不同。
答案 3 :(得分:1)
以下代码可帮助您传递任何值以初始化DATA_Z
:
`
class User{
public:
User::User(float data=0):DATA_Z(data){}; // here `data` is a local parameter to receive the assigned value.
protected:
const float DATA_Z;
}
`