[英]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.