簡體   English   中英

從':: size_t'到'int'的轉換需要縮小的轉換

[英]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類,則應該僅將szsize_t ,因為更好地代表您正在嘗試做的事情。 畢竟,這並不是說vector可以包含< 0元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM