簡體   English   中英

從“unsigned int”到“int”的轉換需要縮小轉換

[英]conversion from 'unsigned int' to 'int' requires a narrowing conversion

我的代碼包括以下內容,我根據下面的最后一行收到上面的錯誤消息。

struct List {
    int word_i;
    int mod_i;
    char mod_type;
    char mod_char;
};

struct Morph {
    Options mode;
    deque<List> search_list;
    vector<string> dictionary;
    vector<bool> discovered;
    string output;
    int sel_word_i = 0;
    bool end_found = 0;
};

// later on in a function:
morph->search_list.push_back({ morph->dictionary.size() - 1, 0, 0, 0 });

您可以將最后一行替換為:

morph->search_list.emplace_back( morph->dictionary.size() - 1, 0, 0, 0 );

因此該對象不是通過不允許縮小轉換的大括號初始化創建的。

縮小轉換是從調用的返回值到size返回std::size_t ,它是無符號的。

有關為什么size() - 1未轉換為有符號值的原因,請參閱: C++ Implicit Conversion (Signed + Unsigned)

當您應用 Amir 的建議時和之后,您可能會收到一條錯誤消息,如“此 function 不需要 (3) arguments”。 要解決此問題,您必須在用於向量的 class 中聲明一個構造函數,該構造函數采用特定數量的 arguments。 根據我在替換push_back(); 使用emplace_back(); 編譯器認為您正在嘗試將一些變量傳遞給構造函數,即假定的 arguments。

暫無
暫無

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

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