use*_*748 2 c++ constructor ctor-initializer c++11
我有一个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) {
}
};
Run Code Online (Sandbox Code Playgroud)
我得到的错误是当我用它实例化它时custom_type,错误是
type A<custom_type> is not direct base of A<custom_type>突出显示我在另一个构造函数中调用的构造函数.我正在使用C++ 11.有什么问题?
构造函数可以初始化其基类和成员,或者委托给同一个类的另一个构造函数,而不是两者.
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); }
Run Code Online (Sandbox Code Playgroud)