c ++常量如何使它们工作

时间:2013-12-08 16:53:41

标签: c++ oop const

到目前为止,我已经使用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初始化列表中初始化

如何为其分配数据,以及如何在课堂上使用它们。

4 个答案:

答案 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;
   }
`