我有一个struct A
,其中包含几个初始化了不同数据成员的构造函数。
template<typename T>
struct A {
typedef std::vector<T> type1
type1 a;
type1 b;
type1 c;
A(type1 i_a): a(i_a) {
}
A(type1 i_a, type1 i_b): A(i_a), b(i_b) {
}
A(type1 i_a, type1 i_b, type1 i_c): A(i_a, i_b), c(i_c) {
}
};
我收到的错误是当我说
custom_type
实例化时,错误是type A<custom_type> is not direct base of A<custom_type>
突出显示我在另一个构造函数中调用的构造函数。我正在使用C++ 11。有什么问题? 最佳答案
构造函数可以初始化其基类和成员,或者委托(delegate)给同一类的另一个构造函数,而不是两者。A(i_a)
构造一个完整的A
对象,复制成员a
以及默认构造的b
和c
。因此,拥有A(type1 i_a, type1 i_b): A(i_a), b(i_b) {}
是没有意义的-第一个初始化程序已经初始化了b
。您可以改为
A(type1 i_a, type1 i_b) : A(i_a) { b = std::move(i_b); }
关于c++ - 从C++中的另一个构造函数调用构造函数时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15438771/