从C++中的另一个构造函数调用构造函数时出错

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.有什么问题?

asc*_*ler 7

构造函数可以初始化其基类和成员,或者委托给同一个类的另一个构造函数,而不是两者.

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)

  • 就是这样:"如果mem-initializer-id指定构造函数的类,它应该是唯一的mem-initializer;构造函数是委托构造函数,mem-initializer选择的构造函数是目标构造函数." 从15.6.2p6开始 (3认同)