繁体   English   中英

错误:隐式转换改变了符号:'int' 到 'unsigned long'

[英]error: implicit conversion changes signedness: 'int' to 'unsigned long'

我正在使用 clang++ "file.cpp" -std=c++14 -Weverything -Wno-c++98-compat 来编译我的程序。 现在我得到以下错误代码:

警告:隐式转换改变了符号:'int' 到 'unsigned long' [-Wsign-conversion]

错误行是这样的:

v_rand = rand() % (english.size());

整个错误代码:

void trainer_es (string lang)
{

    ifstream in("dictionary_es.txt");
    if(!in)
    {
        cout<<"ERROR"<<endl;
        }

    string line;
    int right=0;
    int wrong=0;
    vector<string> english, spanish;
    bool is_english = true; 
    while(in.eof()==0)  
        { 
            getline(in,line);
            if(is_english   
            {
                english.push_back(line);
            }
                else 
            {
            spanish.push_back(line);

            }
        is_english = !is_english;   
        }

    in.close();

    unsigned long v_rand;
    srand(unsigned (time(nullptr)));

    if (lang == "english")
    {
        for (unsigned long int i=0; i<deutsch.size()-1; i++)
        {

            v_rand = rand() % (english.size());
            cout<<"Translate the word: "<<english.at(v_rand)<<endl;
            cin>>line;

            if(line == spanish.at(v_rand))
            {
                cout<<"right!"<<endl;
                right++;
            }

            else 
            {
                cout<<"wrong"<<endl;
                cout<<"the correct word is: "<<spanish.at(v_rand)<<endl;
                wrong++;
            }

        } 
    }

谢谢你的帮助

rand()返回一个int ,它是有符号的。 english.size()返回一个size_t ,它是无符号的。 因此,要计算表达式rand() % english.size()rand()的返回值需要转换为unsigned类型。

这会导致从intunsigned long的隐式转换,从而引发此警告。

我强烈建议查看std::uniform_int_distribution ,您可以为其指定返回类型。 是如何使用它的一个很好的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM