c++ - ¿Qué significa "error: una referencia de miembro no estática debe ser relativa a un objeto específico"?
dll compiler-errors (3)
int CPMSifDlg::EncodeAndSend(char *firstName, char *lastName, char *roomNumber, char *userId, char *userFirstName, char *userLastName)
{
...
return 1;
}
extern "C"
{
__declspec(dllexport) int start(char *firstName, char *lastName, char *roomNumber, char *userId, char *userFirstName, char *userLastName)
{
return CPMSifDlg::EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName);
}
}
En línea return CPMSifDlg::EncodeAndSend
Tengo un error: Error: una referencia de miembro no estática debe ser relativa a un objeto específico.
Qué significa eso?
Solo se llaman funciones estáticas con nombre de clase.
classname::Staicfunction();
Las funciones no estáticas tienen que ser llamadas usando objetos.
classname obj;
obj.Somefunction();
Esto es exactamente lo que significa tu error. Como su función no es estática, debe usar una referencia de objeto para invocarla.
CPMSifDlg::EncodeAndSend()
se declara como no static
y, por lo tanto, se debe CPMSifDlg
utilizando un objeto de CPMSifDlg
. p.ej
CPMSifDlg obj;
return obj.EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName);
Si EncodeAndSend
no utiliza / relaciona ninguna especificidad de un objeto (es decir, this
) sino que es general para la class CPMSifDlg
entonces declararlo como static
:
class CPMSifDlg {
...
static int EncodeAndSend(...);
^^^^^^
};
EncodeAndSend
no es una función estática, lo que significa que se puede CPMSifDlg
en una instancia de la clase CPMSifDlg
. No puedes escribir esto:
CPMSifDlg::EncodeAndSend(/*...*/); //wrong - EncodeAndSend is not static
Más bien debería llamarse así:
CPMSifDlg dlg; //create instance, assuming it has default constructor!
dlg.EncodeAndSend(/*...*/); //correct