Acerca del error: se debe llamar la referencia a la función miembro no estática

About Error Reference Non Static Member Function Must Be Called

problema:

Cuando cepillé el título del ganado hoy:

Descripción del tema:

Ingrese una matriz de números enteros positivos, empalme todos los números de la matriz en un solo número e imprima el más pequeño de todos los números que se pueden empalmar. Por ejemplo, si ingresa la matriz {3,32,321}, el número mínimo que se puede imprimir de estos tres números es 321323.



Este es mi codigo:



|_+_|

El mensaje de error es:



se debe llamar la referencia a la función miembro no estática: sort (numbers.begin (), numbers.end (), bijiao)

resolver:

Echemos un vistazo a la definición de la función de ordenación:

plantilla
orden vacío (RandomAccessIterator primero, RandomAccessIterator último, Comparar comp)
Explicación del parámetro comp:



comp: Función binaria que acepta dos elementos en el rango como argumentos y devuelve un valor convertible a bool. El valor devuelto indica si el elemento pasado como primer argumento se considera que va antes que el segundo en el orden débil estricto específico que define. La función no modificará ninguno de sus argumentos. Puede ser un puntero de función o un objeto de función.

En el código que escribí, el tercer parámetro en sort (numbers.begin (), numbers.end (), bijiao) es un puntero de función, mientras que la función bijiao es una función miembro no estática, un puntero a una función no estática función miembro. Es diferente de los punteros de función ordinarios. La diferencia específica, de la que hablaremos más adelante, pero el puntero de función de miembro estático y el puntero de función ordinaria no son diferentes, por lo que aquí

bool bijiao (int a, int b) ;

Cambiado a

static bool bijiao (int a, int b)

Se puede compilar

O coloque la función bijiao fuera de la clase, y también se puede compilar el cambio a la función normal global.

A continuación, explicamos la diferencia entre los punteros de función miembro y los punteros de función ordinaria: sabemos que la función miembro bijiao tiene un parámetro implícito, bool bijiao (Solución * this, int a, int b). Por lo tanto, es esencialmente diferente de los punteros de función ordinarios. Después de todo, sus listas de parámetros son diferentes. La función miembro estática no tiene un puntero this, por lo que no hay diferencia entre un puntero a función miembro estática y un puntero a función normal. Fuera de esta pregunta, hablemos de la diferencia entre los punteros de función miembro y los punteros de función ordinaria:

Para obtener más detalles, consulte este blog, que es muy bueno y es invasivo:

http://www.cnblogs.com/AnnieKim/archive/2011/12/04/2275589.html


original: https://blog.csdn.net/u010982765/article/details/79021426