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