我想在运行我的应用程序时更改“值”。
但是当我在“RS232.cpp”中调用RS232::PackageRecived时,我恢复了此错误:
错误1错误C2352:“RS232::PackageRecived”:非法调用非静态成员
//////////////////////////////////////////// RS232.cpp FILE
#include "RS232.h"
void RS232::PackageRecived()
{
value =123;
}
void TryCallPackageRecived()
{
RS232::PackageRecived(); // my compiler error is here
}
int RS232::Connect()
{
TryCallPackageRecived();
}
RS232::RS232(void)
{
}
RS232::~RS232(void)
{
}
//////////////////////////////////////////// RS232.h File
class RS232
{
public:
int value;
int Connect();
void PackageRecived();
RS232(void);
~RS232(void);
};
//////////////////////////////////////////// Main.cpp File
#include "RS232.h"
RS232 RS;
int main()
{
RS.Connect();
}
最佳答案
您的函数“TryCallPackageRecived()”不是RS232类的成员。它试图调用不是静态的RS232成员函数。这是不允许的。当您要调用非静态成员函数时,需要在特定对象上调用它。
在这种情况下,您可以执行以下操作:
RS.PackageRecived();
如果要允许多个对象,则可以修改TryCallPackageRecived函数以获取指向RS232对象的指针:
void TryCallPackageRecived(RS232 *ptr)
{
if(ptr != 0)
ptr->PackageRecived();
}
... more code ...
int RS232::Connect()
{
TryCallPackageRecived(this);
}