我有一个 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
和默认构造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/