c++ dll compiler-errors member-functions

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