0

我一直试图让这种代码几乎整晚都在工作,无论如何我在这行代码上遇到了最后一个错误:

if(A[c]>A[c+1]) swap(A,c,c+1);

>关于没有运算符与这些操作数匹配的说法,这给了我一个错误。>>如果我在输入或输出时搞砸了,我之前已经看到过这个错误<<,但这是一个完全不同的问题。

完整代码:

   #include <iostream>
#include <string>
#include <fstream>
#include <algorithm> 
using namespace std;

struct salesTran {
string name;
double quantity,price;
};

bool compareByPrice(salesTran const &a, salesTran const &b)

    {
    return a.price < b.price;
}

void swap(salesTran A[], int i, int j);
void sort(salesTran A[], int size);

ostream& operator << (ostream& os, salesTran A)
{os << A.name << "\t" << A.quantity << "\t" << A.price;
return os;}
istream& operator >> (istream& is, salesTran& A)
{is >> A.name >> A.quantity >> A.price;
return is;}

int main()
{
   salesTran data[250];

ifstream fin;
fin.open("sales.txt");
ofstream fout;
fout.open("results.txt");

int index = 0;
fin >> data[index];
while(!fin.eof())
{
index++;
fin >> data[index];
}

sort(data, index);

for(int j=0; j < index; j++)
{ 
cout << data[j] << endl;
}

return 0;
}

void swap(salesTran A[], int i, int j)
{
salesTran temp;
temp =A[i];
A[j] = A[j];
A[j] = temp;
return;
}


bool compareByPrice(salesTran const &a, salesTran const &b)
{
    return a.price < b.price;


std::sort(data, data + index, compareByPrice);

return;
}
4

2 回答 2

1

重载operator>salesTran是一个坏主意,因为每个字段salesTran都是比较两个事务的完全有效的方法。阅读您的代码(或 API!)的人必须查看文档以找出使用了哪一个。

相反,您可以定义一个比较函数并使用std::sort

#include <algorithm>

bool compareByPrice(salesTran const &a, salesTran const &b)
{
    return a.price < b.price;
}

std::sort(data, data + index, compareByPrice);

如果您对此感兴趣,C++11 lambda 函数也可以使用。

于 2013-03-05T03:51:27.903 回答
0

问题很可能源于您尝试比较的数据类型,例如,使用>关系运算符比较两个整数会起作用,因为它支持这种比较类型。但是,您不能以这种方式比较两个数组,因为内置的关系运算符不是用来比较整个数组的。摆脱这种情况的唯一方法是重载运算符本身。

http://www.cplusplus.com/doc/tutorial/classes2/

于 2013-03-05T03:38:42.677 回答