[英]conversion from '::size_t' to 'int' requires a narrowing conversion
我正在尝试使用“使用C ++编程原理和实践”第18章中给出的代码来实现容器类。 当我使用initializer_list编写用于初始化的代码时,出现以下错误:“从':: size_t'到'int'的转换需要缩小转换”。
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
class vector
{
public:
vector(int s)
:sz{ s },
elem{ new double[sz] }
{
for (int i = 0; i < sz; i++)
elem[i] = 0.0;
}
vector(std::initializer_list<double>lst)
:sz{ lst.size() }, elem{ new double[sz] }
{ //compiler points to here for the error
std::copy(lst.begin(), lst.end(), elem);
}
~vector() { delete[] elem; }
int size() const { return sz; }
double get(int n) const { return elem[n]; }
void set(int n, double d) { elem[n] = d; }
private:
int sz;
double* elem;
};
您正在尝试将size_t
转换为int
。 假定为32位, size_t
最多可以容纳2 ^ 32,因为它是无符号的,而int
只能容纳2 ^ 31(因为它也可以具有负值)。
执行此操作时:
vector(std::initializer_list<double>lst)
:sz{ lst.size() }
如果lst.size()
大于int
存储的值,则无法正确存储该值。 解决方案是仅在内部使用std::vector
并摆脱sz
成员,但是如果看起来好像您正在尝试创建自己的vector
类,则应该仅将sz
为size_t
,因为更好地代表您正在尝试做的事情。 毕竟,这并不是说vector
可以包含< 0
元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.