valor tipos referencia punteros por poner parametros llamadas funciones definicion con como apuntadores c++ quicksort

tipos - punteros en c++ definicion



error: el tipo de objeto llamado ''int'' no es una función o un puntero de función (2)

Su variable local mid se declara en el ámbito que está más cerca del punto de uso, por lo que "sombrea" la función mid() ; el compilador piensa que usted está tratando de "llamar" a un entero, que no es válido. Cambie el nombre de la variable local para solucionar este problema:

int midpoint; if (hi > lo) { int i = lo + 1; int j = hi; int p = mid(lo, hi); swap(vec[lo], vec[p]); midpoint = vec[lo]; ... }

Nota: también puede usar ::mid(lo, hi) lugar de cambiar el nombre de la variable, pero eso confundiría a los lectores de su programa.

Tengo un quicksort que escribí aquí:

void swap(int& a, int& b); int mid(int lo, int hi); // My quicksort implementation void sort(int vec[], int lo, int hi) { int mid; if (hi > lo) { int i = lo + 1; int j = hi; int p = mid(lo, hi); swap(vec[lo], vec[p]); mid = vec[lo]; while (i < j) { if (vec[i] <= mid) { i++; } else { while (i < --j && vec[j] >= mid); swap(vec[i], vec[j]); } } i++; swap(vec[lo], vec[i]); sort(vec, lo, i); sort(vec, j, hi); } } void swap(int& a, int& b) { int temp = a; a = b; b = temp; } int mid(int lo, int hi) { return lo + ((hi - lo) / 2); }

Intenté compilar en un archivo de objeto con g++ -g -c array.cpp -o array.o Recibo este error:

array.cpp:24:14: error: called object type ''int'' is not a function or function pointer int p = mid(lo, hi); ~~~^ 1 error generated.

Todo se ve bien. ¿Alguien puede ayudarme a averiguar qué está mal?


int mid(int lo, int hi); // here you declared mid as function and defined // it later // My quicksort implementation void sort(int vec[], int lo, int hi) { int mid; // but here you declared mid as local variable if (hi > lo) { // it will shadow int mid(int lo, int hi); int i = lo + 1; int j = hi; int p = mid(lo, hi); // so this is error, mid is integer not a function

puede cambiar el nombre de la variable en el algoritmo o usar el operador de resolución de alcance ::mid(lo, hi) para acceder a la función mid previamente definida en el alcance global