这是情况:
我有一个由以下文件定义的类。
Foo.h 文件:
template<typename MyType>
class Foo
{
public:
Foo(int number = 50);
private:
typedef enum {VAR1, VAR2} Type;
class Bar
{
MyType a;
Type b;
Bar(int param1, Type param2) : a(param1), b(param2) {}
}
std::vector<Bar> vec;
};
Foo.cpp 文件:
template<typename MyType>
Foo::Foo(int number) : vec(number)
{ }
问题是当我编译它时,我在 .cpp 文件的第一行收到一个错误,说它需要一个不带参数的 Bar 构造函数。我想它需要它来在 Foo 中创建向量。我为 Bar 添加了一个没有参数的构造函数,给出了以下 .h 文件:
template<typename MyType>
class Foo
{
public:
Foo(int number = 50);
private:
typedef enum {VAR1, VAR2} Type;
class Bar
{
MyType a;
Type b;
Bar() {} // <---- Line added
Bar(int param1, Type param2) : a(param1), b(param2) {}
}
std::vector<Bar> vec;
};
现在我可以编译并且它可以工作了,但是在我刚刚添加的行中有一个警告说Member 'b' was no initialized in this constructor
. 枚举的问题,也许?
我不明白我应该怎么做才能让它在没有这个警告的情况下工作。
编辑:我收到了一些答案,说要向空构造函数添加一个初始化列表。但是,我的类实际上是一个模板类,a
对我来说是一个未知类型,所以我无法初始化它,因为我不知道它的类型。我尝试仅b
在 Bar 的初始化列表中进行初始化,它起作用了。警告消失了,但是让a
未初始化可以吗?有没有办法删除没有 Bar 参数的构造函数,并且仍然给 Foo 构造函数中的向量一个大小?