我有一个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以及默认构造的bc。因此,拥有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/

10-12 03:01