"error : a nonstatic member reference must be relative to a specific object"是什么意思?

what does "error : a nonstatic member reference must be relative to a specific object" mean?

本文关键字:specific to object 是什么 意思 relative must error nonstatic member reference      更新时间:2023-10-16
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我有一个错误:错误:非静态成员引用必须相对于特定对象。

什么意思?

EncodeAndSend不是

静态函数,这意味着它可以在类CPMSifDlg的实例上调用。你不能这样写:

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

它应该被称为:

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

仅使用类名调用静态函数。

classname::Staicfunction();

非静态函数必须使用对象调用。

classname obj;
obj.Somefunction();

这正是您的错误的含义。由于您的函数是非静态的,因此您必须使用对象引用来调用它。

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(...);
  ^^^^^^
};
相关文章: