2012-03-22 68 views
23
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ático debe ser relativa a un objeto específico.¿Qué significa "error: una referencia de miembro no estático debe ser relativa a un objeto específico"?

¿Qué significa?

Respuesta

27

EncodeAndSend no es una función estática, que significa que puede invocarse en una instancia de la clase CPMSifDlg. No se puede escribir esto:

CPMSifDlg::EncodeAndSend(/*...*/); //wrong - EncodeAndSend is not static 

Más bien debería llamarse como:

CPMSifDlg dlg; //create instance, assuming it has default constructor! 
dlg.EncodeAndSend(/*...*/); //correct 
+0

pero si elimino el "CPMSifDlg", recibí el "error: identificador EncodeAndSend no está definido" –

+0

@OscarYuandinata: ¿Has leído lo que dije en mi respuesta? – Nawaz

+0

les gusta esto ¿verdad? 'CPMSifDlg dlg; \t \t retorno dlg.EncodeAndSend (nombre, apellido, roomNumber, ID de usuario, USERFIRSTNAME, USERLASTNAME); ' se dice que el método es –

7

El método CPMSifDlg::EncodeAndSend() se declara como no static y, por lo tanto, debe llamarse utilizando un objeto de CPMSifDlg. p.ej.

CPMSifDlg obj; 
return obj.EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName); 

Si EncodeAndSend no utiliza/relacionar cualquier información específica de un objeto (es decir this) pero general para la class CPMSifDlg entonces declarará como static:

class CPMSifDlg { 
... 
    static int EncodeAndSend(...); 
    ^^^^^^ 
}; 
6

funciones estáticas Sólo se denominan con el nombre de la clase.

classname::Staicfunction(); 

Las funciones no estáticas tienen que ser llamadas usando objetos.

classname obj; 
obj.Somefunction(); 

Esto es exactamente lo que significa su error. Como su función no es estática, debe usar una referencia de objeto para invocarla.

+0

No creo que esto sea estrictamente cierto. Si llama a un método no estático en una clase base desde dentro de una clase derivada, entonces se usa la sintaxis Base :: function(). – Flakker

+0

si su método en derivado no es estático. –

Cuestiones relacionadas