【问题标题】:Cannot initialize a class member?无法初始化类成员?
【发布时间】:2016-08-02 00:02:22
【问题描述】:

在我正在浏览的笔记中,我来到了显示它的页面

class Student{
public:
    Student()
    {
        age = 5; //Initialize age
    };
private:
    int age; // **Cannot initialized a class member**
    string name; // **Cannot initialized a class member**
 };

不能初始化类成员是什么意思?这是一个关于构造函数初始化列表的话题。我已经使用此代码在 VS 中进行了测试,效果很好。

class TestClass
{
    int number = 27; //The member is initialized without a problem.
public:
    TestClass();
    int getNumber(); // Return number
    ~TestClass();
};

如果我问了一个愚蠢的问题,我深表歉意,但我希望通过在这里发布这个问题来更好地学习。

【问题讨论】:

  • 取决于你做笔记的时间、你使用的编译器、你使用的标准,这可能是一个骗局:stackoverflow.com/questions/15451840/…
  • @NathanOliver 谢谢!这就解释了为什么。但现在我有一个更大的问题。我不知道我的试卷应该写哪一篇!
  • 您的班级是否按照特定标准进行教学?
  • @NathanOliver 现在不确定。我这次考试失败了一次。而且已经一年多了。打算在即将到来的星期四重新考虑这篇论文。可能会尽快找到我的讲师

标签: c++ class constructor visual-studio-2015 initializer-list


【解决方案1】:

如果您是印度人并且是 12 年级的学生,那么这个答案适合您...

参见代码 1 非常好,并且可以根据 c++ 的所有标准正常运行。在代码 2 中,如果您使用的标准早于 c++11,则只能在声明时初始化静态成员

现在,印度学校通常教授的标准比 c++11(我猜是 c++03)更早。但是 VS 使用最新的编译器并相应地编译代码。因此,您的代码在 VS 上运行,但根据书籍是错误的

【讨论】:

    【解决方案2】:

    第二个示例(在声明点初始化非静态类成员)仅在 C++11 或更高版本中允许。

    第一个在 C++11 之前有效,尽管通常认为使用初始化列表实现构造函数比在构造函数主体中分配它更好。

    //  within your definition of class Student
    
    Student() : age(5)
    {
    };
    

    如果您希望您的代码与较旧的(C++11 之前的)编译器一起使用,则不能在声明时初始化非静态成员。

    如果您希望您的代码仅与 C++11(或更新的)编译器一起使用,那么这两个选项都是有效的,并且选择归结为编码风格(即它是主观的)。

    【讨论】:

      【解决方案3】:

      在 c++ 11 之前,您不能初始化非静态变量。您需要使用 getter 和 setter。

      class Student{
      public:
          Student()
          {
              age = 5; //Initialize age
          };
      private:
          int age; // **Cannot initialized a class member**
          string name = "Hello"; // Invalid 
      };
      

      【讨论】:

      • 是的。现在我更加困惑我应该很快在我的试卷中使用哪个:(
      • 检查你的笔记,更好的用户 getter 和 setter 方法,这样你就可以安全而不是初始化变量。
      猜你喜欢
      • 2015-03-22
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多