1

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

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

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

但是当我保持变量未定义时,它会:

class myClass {
    private:
        int x;
};
4

6 回答 6

11

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

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

在构造函数的主体中使用 this 分配总是更好,因为在主体开始时,所有用户定义的成员都已经被初始化,无论你是否这样说。最好执行一次并实际初始化非用户定义的成员,这唯一适用于非静态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;语法在 C++11 中完全有效,它可以用于任何需要的初始化,因此如果您开始使用它,您将受益。

于 2012-07-11T20:31:58.863 回答
2

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

class myClass {
private:
    int x;

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

更新答案: 根据chris,最好使用成员初始化

class myClass {
private:
    const int x;
public:
    myClass() : x (4){}
};
于 2012-07-11T20:22:39.937 回答
0

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

于 2012-07-11T20:23:11.510 回答
0

你的班级就像一张蓝图。它没有任何与之关联的存储。当您实例化您的类的对象时,这类似于基于该蓝图的建筑物。您的对象具有存储空间,并且可以保存您赋予成员变量的值。

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

于 2012-07-11T20:24:37.150 回答
0

在 C++03中,

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

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

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

或者

class myClass {
    private:
     static const int x = 4;
};
于 2012-07-11T20:25:11.323 回答
0

这样做:

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

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

于 2012-07-11T20:28:33.433 回答