Osc*_*ata 33 c++ dll compiler-errors member-functions
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);
}
}
Run Code Online (Sandbox Code Playgroud)
在线return CPMSifDlg::EncodeAndSend我有一个错误:错误:非静态成员引用必须相对于特定对象.
这是什么意思?
Naw*_*waz 44
EncodeAndSend不是静态函数,这意味着它可以在类的实例上调用CPMSifDlg.你不能写这个:
CPMSifDlg::EncodeAndSend(/*...*/); //wrong - EncodeAndSend is not static
Run Code Online (Sandbox Code Playgroud)
它应该被称为:
CPMSifDlg dlg; //create instance, assuming it has default constructor!
dlg.EncodeAndSend(/*...*/); //correct
Run Code Online (Sandbox Code Playgroud)
CPMSifDlg::EncodeAndSend()方法声明为非static,因此必须使用对象调用CPMSifDlg.例如
CPMSifDlg obj;
return obj.EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName);
Run Code Online (Sandbox Code Playgroud)
如果EncodeAndSend不使用/关联对象的任何细节(即this),但一般用于class CPMSifDlg声明它为static:
class CPMSifDlg {
...
static int EncodeAndSend(...);
^^^^^^
};
Run Code Online (Sandbox Code Playgroud)
只使用类名调用静态函数.
classname::Staicfunction();
Run Code Online (Sandbox Code Playgroud)
必须使用对象调用非静态函数.
classname obj;
obj.Somefunction();
Run Code Online (Sandbox Code Playgroud)
这正是您的错误所意味着的.由于您的函数是非静态的,因此您必须使用对象引用来调用它.
| 归档时间: |
|
| 查看次数: |
135701 次 |
| 最近记录: |