No hay coincidencia para el operador

Así que estoy tratando de usar una función de clasificación (similar a una burbuja) y pasarle un objeto. Si ese objeto es más grande (alfabéticamente), cambie luego devuelva verdadero y cambie eso con el anterior. Sigo recibiendo un error dentro de la sentencia if dentro de mySort() que dice “no hay coincidencia para el operador [] en arr [j]” pero, según tengo entendido, estoy pasando una matriz de objetos, ¿no? ¿Por qué sucede esto y cómo puedo resolverlo?

Aquí está el conductor

 #include  #include  #include  #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; } 

Cabecera de entrada de teléfono

Cabecera del número de teléfono

Ordenar texto (http://pastebin.com/HE8Rsmbg)

  1. arr debe ser una matriz, no una referencia, como esta PhoneEntry arr[]

  2. Debe pasar una matriz completa a la ordenación, no un solo elemento, como este: mySort(entry, count);

Aparte de esto, su código aparece bien.

Debo agregar que esto no es una solución de C ++: la forma preferida de administrar arrays en C ++ es mediante el uso del contenedor std::vector de la biblioteca estándar. Lo bueno de los vectores es que no es necesario que pasen su tamaño “de lado”.

Puedes usar
Notación de puntero – mySort(PhoneEntry * arr, int size)
o notación de matriz – mySort(PhoneEntry arr[], int size) .

Si desea pasar toda la matriz cuando llama a la función, simplemente haga mySort(entry, count) .

arr no es una matriz en tu método.

cambia tu firma de método a

void mySort(PhoneEntry *arr, int size)

y llama a tu método con

mySort(entry[count], count);

Desde mi entendimiento, estoy pasando una matriz de objetos, ¿verdad?

No, no estás pasando una matriz de objetos. Está pasando una referencia (indicada por el & en el encabezado de la función) al elemento PhoneEntry que se encuentra en la posición de count -th en la matriz de entry . Probablemente quiso decir PhoneEntry* arr en el encabezado de mySort , que requeriría un puntero a una instancia de PhoneEntry , y como el nombre de una matriz se puede interpretar como un puntero al primer elemento de esa matriz, simplemente podría pasar la entry como El primer argumento para mySort .

Sustituye esto:

 void mySort(PhoneEntry * arr, int size) 

En lugar de esto:

 // Wrong mySort(entry[count], count); 

… haz uno de estos (según corresponda):

 // Always passes the start of the array, "entry[0]": mySort(entry, count); // Passes a pointer to a particular entry, onwards: mySort(&entry[count], count); 
Intereting Posts