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

时间:2014-03-21 09:29:31

标签: c++

我在这行代码中遇到此错误。请帮我解决一下。

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;

}

3 个答案:

答案 0 :(得分:4)

成员函数大小返回的值的类型是无符号的,而i被声明为signed。

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

所以代替int i使用至少unsigned int isize_t i。如果你要使用类std :: vector中定义的类型{{},那就更好了。 1}}

同样在循环的条件部分,您使用赋值运算符std::vector<double>::size_type i而不是比较运算符=但是如果您要更新运算符,则条件将是错误的,直到size()将是等于0.而不是运算符==,您必须使用==

循环应该采用以下方式

<=

另外,对于这个for语句,你可以使用基于范围的语句看起来更简单。例如

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

答案 1 :(得分:2)

i的类型为int(signed),而Main.size()的结果为unsigned int,可能为size_t,具体取决于Main的tye。 如果你在for循环中比较它们,你有解释。

但请注意:单个=是一项任务,而非比较。

修复(可能):

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

答案 2 :(得分:0)

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

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

(作为旁注,用大写字母命名变量(Main)有点令人困惑!)