2012-03-22 23 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); 
    } 
} 

On line return CPMSifDlg::EncodeAndSend Ho un errore: Errore: un riferimento di membro non statico deve essere relativo a un oggetto specifico.cosa significa "errore: un riferimento di membro non statico deve essere relativo a un oggetto specifico" significa?

Che cosa significa?

risposta

27

EncodeAndSend non è funzione statica, che significa che può essere richiamato su un'istanza della classe CPMSifDlg. Non è possibile scrivere questo:

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

Si dovrebbe piuttosto essere chiamato come:

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

ma se rimuovo "CPMSifDlg", ho ottenuto "errore: identificatore EncodeAndSend non definito" –

+0

@OscarYuandinata: hai letto quello che ho detto nella mia risposta? – Nawaz

+0

piace questo giusto? 'CPMSifDlg dlg; \t \t ritorno dlg.EncodeAndSend (nome, cognome, roomnumber, userId, USERFIRSTNAME, USERLASTNAME); ' si dice che il metodo è inaccessibile –

7

CPMSifDlg::EncodeAndSend() metodo è dichiarato come non static e quindi deve essere chiamato utilizzando un oggetto di CPMSifDlg. per esempio.

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

caso EncodeAndSend non usa/riguardare eventuali specifiche di un oggetto (cioè this) ma generale di class CPMSifDlg allora dichiarare come static:

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

funzioni solo statiche sono chiamate con il nome della classe.

classname::Staicfunction(); 

Le funzioni non statiche devono essere richiamate utilizzando gli oggetti.

classname obj; 
obj.Somefunction(); 

Questo è esattamente ciò che significa il tuo errore. Dato che la tua funzione non è statica devi usare un riferimento a un oggetto per invocarlo.

+0

Non penso che sia assolutamente vero. Se si chiama un metodo non statico in una classe base da una classe derivata, viene utilizzata la sintassi Base :: function(). – Flakker

+0

se il metodo in derivato non è statico. –

Problemi correlati