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