![](/img/trans.png)
[英]implicit conversion changes signedness 'int“ to 'unsigned int”
[英]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
类型。
这会导致从int
到unsigned long
的隐式转换,从而引发此警告。
我强烈建议查看std::uniform_int_distribution
,您可以为其指定返回类型。 这是如何使用它的一个很好的例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.