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
CPMSifDlg::EncodeAndSend()
メソッドはnon _static
として宣言されているため、CPMSifDlg
のオブジェクトを使用して呼び出す必要があります。例えば.
CPMSifDlg obj;
return obj.EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName);
EncodeAndSend
がオブジェクトの詳細(つまりthis
)を使用/関連付けしないが、class CPMSifDlg
その後、static
として宣言します。
class CPMSifDlg {
...
static int EncodeAndSend(...);
^^^^^^
};
静的関数のみがクラス名で呼び出されます。
classname::Staicfunction();
非静的関数は、オブジェクトを使用して呼び出す必要があります。
classname obj;
obj.Somefunction();
これがまさにエラーの意味です。関数は静的ではないため、オブジェクト参照を使用して呼び出す必要があります。