1. ホーム
  2. c++

[解決済み] No Match for Operator[] (オペレータにマッチするものはありません)

2022-02-11 07:11:12

質問

ソート機能(バブルに似ている)を使って、オブジェクトを渡そうとしています。もし、そのオブジェクトが(アルファベット順に)大きければ、switchはtrueを返し、その前にswitchします。しかし、以下のif文の中でエラーが発生します。 mySort() しかし、私の理解では、私はオブジェクトの配列を渡しているのですよね?なぜこのようなことが起こるのでしょうか、そしてどうすれば解決できるのでしょうか?

以下はそのドライバです。

#include <iostream>
#include <fstream>
#include <string>
#include "phoneEntry.h"
using namespace std;

void mySort(PhoneEntry &arr, int size)
{
    bool inOrder = false;
    string temp;
    for (int i = size - 1; i > 0 && !inOrder; i--)
    {
        inOrder = true;
        for (int j = 0; j < i; j++)
        {
            if(arr.alphaGreater(arr[j]))
            {
                inOrder = false;
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
};

int main()
{   
    const int MAXNUM = 500;
    PhoneEntry entry[MAXNUM];
    ifstream filezilla;
    filezilla.open("phone.txt");
    int count = 0;

    if(filezilla)
    {
        while(count < MAXNUM && entry[count].readEntry(filezilla))
        {
            count++;
            mySort(entry[count], count);
        }   

        for(int i = 0; i < count; i++)
        {
            entry[i].writeEntry(cout) << endl;
        }
    }
    else
    {
        cout << "404" << endl;
    }

    return 0;
}

電話入力用ヘッダー

電話番号ヘッダー

テキストの並べ替え (http://pastebin.com/HE8Rsmbg)

解決方法は?

  1. arr は参照ではなく、次のような配列でなければなりません。 PhoneEntry arr[]

  2. ソートには、このように単一の要素ではなく、配列全体を渡す必要があります。 mySort(entry, count);

これ以外のコードは問題ないようです。

これはC++的な解決策ではないことを付け加えておきます:C++で配列を管理するのに適した方法は std::vector<T> コンテナです。ベクターの良いところは、サイズを渡す必要がないことです。