错误:有符号整数表达式和无符号整数表达式之间的比较

Error: comparison between signed and unsigned integer expressions?

本文关键字:表达式 无符号整数 之间 比较 错误 符号 整数      更新时间:2023-10-16

我在这行代码中得到这个错误。请帮我解决这个问题。

for (int i=0; i=((Main.size())-1); i++) {
. .

主要代码

#include <istream>
#include <fstream>
#include <vector>
#include <algorithm>
#include "data.hpp"
using namespace std;
int main() {
vector<double> Main;
int count;
string lineData;
double tmp;
ifstream myfile ("sheffield.data", ios::in);
//double number;  
myfile >> count;
for(int i = 0; i < count; i++) {
    myfile >> tmp;
    Main.push_back(tmp);
    cout << count;
}
cout << "Numbers:n";
cout << Main.size();
for (int i=0; i=((Main.size())-1); i++) {
    cout << Main[i] << 'n';
}
cin.get(); 
return 0;

}

成员函数size返回的值类型为unsigned,而i声明为signed。

for (int i=0; i=((Main.size())-1); i++) {
    cout << Main[i] << 'n';
}

因此,至少使用unsigned int isize_t i来代替int i。如果使用std::vector类中定义的类型std::vector<double>::size_type i

就更好了

同样在循环的条件部分,你使用赋值操作符=而不是比较操作符==,但是如果你更新操作符,条件将是错误的,直到size()等于0。你必须使用<=

来代替==运算符

循环应该如下所示

for ( std::vector<double>::size_type i = 0; i < Main.size(); i++ ) {
    cout << Main[i] << 'n';
}

也可以使用基于范围的for语句来代替这个for语句,这样看起来简单得多。例如

for ( double x : Main ) {
    cout << x << 'n';
}

i是int类型(有符号),Main.size()是unsigned int的结果,根据Main的类型可能是size_t。如果你在for循环中比较它们,你就得到了你的解释。

但是要注意:单个=是赋值操作,而不是比较操作。

修复(可能):

for (unsigned int i=0; i < Main.size(); i++) {

你也可以考虑使用迭代器:

cout << "Numbers:n";
cout << Main.size();
for (vector<double>::const_iterator i = Main.begin(); i != Main.end(); ++i) {
    cout << *i << 'n';
}

(顺便说一句,用大写字母命名变量(Main)有点令人困惑!)