如何在C ++中初始化构造函数中的对象

时间:2015-02-20 11:15:49

标签: c++ constructor initialization lint

我在C ++中有以下代码:

//这是头文件test.h

typedef struct
{
   int a;
   int b;
} Numbers;

class Test
{
private;
   Numbers numbers_;
};

//这是源文件test.cpp

#include "test.h"

Test::Test()
{}

然后我对它运行lint,它说警告1401成员“numbers_”没有被构造函数初始化

我知道如何在构造函数中初始化内置类型,但是如何初始化类似Numbers的类型?

4 个答案:

答案 0 :(得分:1)

这是你应该做的:

typedef struct numbers
{
   int a;
   int b;
   numbers()
   {
       a = 0;
       b = 0;
   }
} Numbers;

class Test
{
private:
   Numbers numbers_;
public:
    Test() : numbers_()
    {
    }
};

请注意:

  1. 我将struct命名为numbers,然后给它一个无参数构造函数
  2. 此外,您的代码中存在编译时错误。 access specifers (在您的情况下为private)必须后跟冒号:),而不是半-colon ;
  3. 我为Test添加了无参数构造函数,并使用 initializer_list 来调用Numbers的构造函数。

答案 1 :(得分:0)

为结构使用构造函数。

你会在这里找到一些例子:

enter link description here

答案 2 :(得分:0)

有许多方法可以初始化类成员。

您可以对其进行聚合初始化,为每个成员提供值:

Test::Test() : numbers_{42,53} {}

或者你可以初始化它,将每个成员设置为零:

Test::Test() : numbers_() {}

或者,如果您并不特别需要Numbers类是纯数据,那么您可以让它自己初始化。您可以为每个成员提供一个类内初始化程序:

int a = 42;
int b = 53;

或者你可以给它一个构造函数:

struct Numbers  // the class needs a name to declare a constructor
{
    Numbers() : a(42), b(53) {}
    int a;
    int b;
};

或许,您可以忽略或禁用警告,但在使用之前请注意为未初始化的成员分配值。

答案 3 :(得分:0)

如果您不想为Numbers类编写自定义构造函数,您还可以在Test构造函数中初始化成员对象的字段:

Test::Test()
{
    numbers_.a = 0;
    numbers_.b = 0;
}