我在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
的类型?
答案 0 :(得分:1)
这是你应该做的:
typedef struct numbers
{
int a;
int b;
numbers()
{
a = 0;
b = 0;
}
} Numbers;
class Test
{
private:
Numbers numbers_;
public:
Test() : numbers_()
{
}
};
请注意:
struct
命名为numbers
,然后给它一个无参数构造函数。private
)必须后跟冒号(:
),而不是半-colon (;
)Test
添加了无参数构造函数,并使用 initializer_list 来调用Numbers
的构造函数。答案 1 :(得分:0)
答案 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;
}