Что означает "ошибка: ссылка нестатического члена должна относиться к определенному объекту" означает?
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
У меня есть ошибка:
Ошибка: ссылка нестатического элемента должна быть относительно определенного объекта.
Что это значит?
Ответы
Ответ 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();
Это именно то, что означает ваша ошибка. Поскольку ваша функция не статична, вы должны использовать ссылку на объект для ее вызова.