Подтвердить что ты не робот

Что означает "ошибка: ссылка нестатического члена должна относиться к определенному объекту" означает?

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);
    }
}

В строке return CPMSifDlg::EncodeAndSend У меня есть ошибка: Ошибка: ссылка нестатического элемента должна быть относительно определенного объекта.

Что это значит?

4b9b3361

Ответ 1

EncodeAndSend не является статической функцией, что означает, что он может быть вызван на экземпляр класса CPMSifDlg. Вы не можете написать это:

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

Его следует скорее назвать:

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

Ответ 2

CPMSifDlg::EncodeAndSend() метод объявляется как static, и поэтому он должен вызываться с использованием объекта CPMSifDlg. например.

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

Если EncodeAndSend не использует/не связывает какие-либо особенности объекта (т.е. this), а вообще для class CPMSifDlg, то объявляйте его как static:

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

Ответ 3

Вызывается только статические функции с именем класса.

classname::Staicfunction();

Нестатические функции должны вызываться с использованием объектов.

classname obj;
obj.Somefunction();

Это именно то, что означает ваша ошибка. Поскольку ваша функция не статична, вы должны использовать ссылку на объект для ее вызова.