我想将简单的整数 vector 转换为自定义类的 vector 。我的类有一个接受 int 的构造函数。
class BitInteger {
public:
BitInteger(int num) {
// code omitted
}
};
我试过下面的代码,但它返回了一些深奥的错误,我该如何解决?
std::vector<int> nums {0, 1, 2, 3, 5, 6, 7, 8, 9};
std::vector<BitInteger> bitIntegers(nums.size());
bitIntegers.assign(nums.begin(), nums.end());
错误是:
no matching constructor for initialization of 'BitInteger'
::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
我怎样才能改变我的构造函数让它工作,或者有更简单的方法吗?
最佳答案
注意错误消息中的行号。问题不在 assign
调用中;它在 vector 的初始化上。
当创建特定大小的 std::vector
时, vector 会填充默认构造的元素。 BitInteger
不是可默认构造的,因此您不能创建包含它们的 nums.size()
的 vector 。提供默认构造函数以使代码编译。
BitInteger() {
// ...
}
或者,您可以直接从先前的 vector 构造元素。
std::vector<BitInteger> bitIntegers(num.begin(), num.end());
然后你可以跳过整个空的初始化步骤。 (感谢@Tas 的建议)
关于c++ - 将一种类型的 std::vector 转换为另一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48254978/