web-dev-qa-db-fra.com

que signifie "erreur: une référence de membre non statique doit être relative à un objet spécifique" signifie?

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 ligne return CPMSifDlg::EncodeAndSend J'ai une erreur: Erreur: une référence de membre non statique doit être relative à un objet spécifique.

Qu'est-ce que ça veut dire?

33
Oscar Yuandinata

EncodeAndSend n'est pas une fonction statique, ce qui signifie qu'elle peut être appelée sur une instance de la classe CPMSifDlg. Vous ne pouvez pas écrire ceci:

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

Il devrait plutôt s'appeler comme:

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

La méthode CPMSifDlg::EncodeAndSend() est déclarée comme non -static et doit donc être appelée à l'aide d'un objet de CPMSifDlg. par exemple.

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

Si EncodeAndSend n’utilise pas/associe aucune spécificité d’objet (c.-à-d. this) mais général pour le class CPMSifDlg puis déclarez-le comme static:

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

Seules les fonctions statiques sont appelées avec le nom de la classe.

classname::Staicfunction();

Les fonctions non statiques doivent être appelées à l'aide d'objets.

classname obj;
obj.Somefunction();

C'est exactement ce que votre erreur signifie. Puisque votre fonction est non statique, vous devez utiliser une référence d'objet pour l'invoquer.

7