2014-10-20 48 views
-5

Debian使用内核3.16-2-amd64和KDE 4.14.1进行测试。不交叉编译。使用cmake。prefsdialogimpl.cpp:61:18:警告:比较带符号和无符号整数表达式[-Wsign-compare]

试图重振老的KDE应用程序,但:

[ 80%] Building CXX object CMakeFiles/knet.dir/prefsdialogimpl.o 
/usr/local/src/knet/prefsdialogimpl.cpp: In member function ‘void PrefsDialogImpl::setDeviceChoices(QVector<QString>)’: 
/usr/local/src/knet/prefsdialogimpl.cpp:61:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] 
for(uint i=0; i<choices.count(); i++) 

相关功能如下:

void PrefsDialogImpl::setDeviceChoices(QVector<QString> choices) 
{ 
    for(uint i=0; i<choices.count(); i++) 
     diagram_deviceComboBox->insertItem((choices[i]), i); 
} 

和整个文件,prefsdialogimpl.cpp,是在这里:https://pastee.org/fhb3u

我没有找到无符号整数的位置,也不知道如何解决它。我是新的C++,但正在学习。

+1

欢迎来到Stack Overflow。你忽略了问一个问题。请[编辑]你的问题,包括一个完整的句子,告诉你面临的问题。你提供了一个编译器错误;什么阻止你修复它? – 2014-10-20 19:04:44

+0

警告清楚地告诉您它在哪里出现问题。我猜想'choices.count'会返回一个(带符号的)整数值,你可以用'uint'来比较 – UnholySheep 2014-10-20 19:23:53

回答

1

如果您查找the documentation for QVector::count(),您会看到count返回一个带符号的整数值。将此值与您的iuint)进行比较时,会发生符号不匹配。

您可以通过将i的定义更改为int i来修复此差异。

+0

非常好,谢谢Magnus。我不明白,虽然这个相同的陈述被用于围绕这一个的三个功能,但它们并没有失败。我将它们设置为整数,然后他们得到签名/未签名的错误。 – Bill 2014-10-20 19:34:12

+0

@Bill当然不一样。这个功能和其他功能有什么区别? “选择”有不同的类型。这怎么能起作用?因为,'count'函数是不同的。去查找另一个'count'函数的文档,找出差异的原因。查找文档应该是第二性质,尤其是在您学习时,并且我认为您仅仅因为没有查阅文档而得到一些提示。以此作为训练练习;):) – 2014-10-22 11:44:06

相关问题