为什么我不能在类中定义变量?

时间:2012-07-11 20:19:54

标签: c++

每当我定义一个变量并在一个类中同时给它一个值时,我就会收到一个错误。这是什么原因?

如您所见,这不起作用......

class myClass {
    private:
        int x = 4; // error
};

但是当我保持变量undefined时它会:

class myClass {
    private:
        int x;
};

6 个答案:

答案 0 :(得分:11)

由于没有其他人使用成员初始化,我将向您介绍:

class myClass {
    private:
        int x;
    public:
        myClass() : x (4){}
};

最好在构造函数的主体中使用它来分配,因为在正文开始时,无论你是否这样说,所有用户定义的成员都已经被初始化了。最好这样做一次并实际初始化非用户定义的成员, 是唯一适用于非静态const成员和参考成员的方法。

例如,以下操作无效,因为x未在正文中初始化,而是被分配到:

class myClass {
    private:
        const int x;
    public:
        myClass() {x = 4;}
};

然而,使用成员初始化程序,因为你正在初始化它:

class myClass {
    private:
        const int x;
    public:
        myClass() : x (4){}
};

另请注意,您的int x = 4;语法为perfectly valid in C++11,它可用于任何所需的初始化,因此如果您开始使用它,您将受益。

答案 1 :(得分:2)

在构造函数中初始化变量。

class myClass {
private:
    int x;

public:
   myClass()
   {
       x = 4; // hope that it will work
   }
};

更新答案: 根据{{​​3}},最好使用成员初始化

class myClass {
private:
    const int x;
public:
    myClass() : x (4){}
};

答案 2 :(得分:0)

实例变量应该使用setter方法定义,IE:setX(input)或构造函数内部。

答案 3 :(得分:0)

你的课程就像蓝图。它没有任何与之关联的存储空间。当您实例化类的对象时,这类似于基于该蓝图的构建。您的对象具有存储空间,可以保存您为成员变量赋予的值。

另外,正如其他人所指出的,可以在C ++ 11中做你想做的事。查看:   http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm

答案 4 :(得分:0)

在C ++ 03中

  

只能在a中初始化静态const积分数据成员   类。

在构造函数中初始化,或者创建数据成员static const

class myClass {
    private:
        int x;
    public:
      myClass() {
        x = 4;
      }
};

class myClass {
    private:
     static const int x = 4;
};

答案 5 :(得分:0)

这样做了:

class myClass
{
private:
    static const int x = 4;
};

如果x不是静态或常量,请仅使用int x;,并在类的构造函数中初始化x