我想将int的简单向量转换为我的自定义类的向量。我的类有一个接受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)...);
如何更改构造函数以使其工作,或者是否有更简单的方法?
答案 0 :(得分:7)
注意错误消息上的行号。问题不在assign
电话中;它是关于矢量初始化的。
创建特定大小的std::vector
时,向量将填充默认构造的元素。 BitInteger
不是默认构造的,因此您无法制作包含nums.size()
个向量的向量。提供默认构造函数以使代码编译。
BitInteger() {
// ...
}
或者,您可以直接构造前一个向量中的元素。
std::vector<BitInteger> bitIntegers(num.begin(), num.end());
然后您可以跳过整个空的初始化步骤。 (感谢@Tas提出此建议)