構造体配列に格納されたインベントリをバブル ソートしようとすると、次のコードをコンパイルすると 2 つの異なるエラーが発生します。
void SORT_INVENTORY(Books* list, int max, int position)
{
bool swap;
string temp;
do
{
swap = false;
for (int count = 0 ; count < (position - 1) ; count++)
{
if ( tolower(list[count].Title) > tolower(list[count + 1].Title))
{
temp = list[count];
list[count] = list[count + 1];
list[count + 1] = temp;
swap = true;
}
}
} while (swap);
tolower を使用して、2 つの構造体配列の Title 要素を比較したいと考えています。ただし、 tolower を呼び出す一致する関数がないと表示されるため、コンパイラはプログラムを実行できません。
if ステートメントをこれに切り替えると、次のようになります。
if ( ::tolower(list[count].Title) > ::tolower(list[count + 1].Title))
「一致する関数がありません」というメッセージは消えますが、新しいメッセージに置き換えられます: 'string' (別名 'basic_string, allocator >') から 'int' への実行可能な変換はありません。
最後に、if ステートメントの本文のステートメントに関する一貫したエラー メッセージが表示されtemp = list[count]
ますlist[count + 1] = temp
。
最後の詳細: list は構造体データ型として宣言された配列です。私は何を間違っていますか?