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

の各フィールドは2つのトランザクションを比較するための完全に有効な方法であるため、オーバーロードoperator>することはお勧めできません。コード(またはAPI!)を読んでいる人は、ドキュメントを見て、どれが使用されているかを確認する必要があります。salesTransalesTran

代わりに、比較関数を定義して次を使用できます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ラムダ関数も機能するでしょう。

于 2013-03-05T03:51:27.903 に答える
0

問題は、比較しようとしているデータのタイプに起因している可能性があります。たとえば、2つの整数を>関係演算子と比較すると、そのタイプの比較がサポートされるため、機能します。ただし、組み込みの関係演算子は配列全体を比較するように作成されていないため、この方法で2つの配列を比較することはできません。そのようなことをやめる唯一の方法は、演算子自体をオーバーロードすることです。

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

于 2013-03-05T03:38:42.677 に答える