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

标签 c++ c++11 constructor ctor-initializer

我有一个 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) {
    }
};

我得到的错误是当我用 say 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/

相关文章:

c++ - 单个可执行文件和不同的服务

c++ - 无锁代码中的延迟初始化

c++ - 如何实现引用构造函数?

c++ - 安装vs2008和vs2010时的qmake

c++ - 接受 0 个参数并返回类型可转换为 int 的未知类方法回调

c++ - 避免重复 SFINAE 区分无效和非无效返回类型

c++ - 如何从模板类的可变包中的每个类型中恢复非类型名模板参数?

c++ - 为构造的 std::vector 中的每个元素调用默认构造函数

javascript - 请解释有关javascript中原型(prototype)属性和函数构造函数的详细信息

c++ - std::atomic_flag 不提供加载或存储操作有什么缺点吗? (自旋锁示例)