在课堂上调用函数

时间:2011-09-30 05:29:07

标签: c++ class function

我想在运行我的应用时更改“值”。   但当我在“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();
}

3 个答案:

答案 0 :(得分:1)

您的函数“TryCallPackageRecived()”不是RS232类的成员。它试图调用非静态的RS232成员函数。这是不允许的。如果要调用非静态成员函数,则需要在特定对象上调用它。

在这种情况下,你可以这样做:

RS.PackageRecived();

如果要允许多个对象,可以修改TryCallPackageRecived函数以获取指向RS232对象的指针:

void TryCallPackageRecived(RS232 *ptr)
{
   if(ptr != 0)
      ptr->PackageRecived(); 
}

... more code ...

int RS232::Connect()
{
    TryCallPackageRecived(this);
}

答案 1 :(得分:0)

那是因为PackageRecived不是静态方法,你不能在没有对象的情况下调用非静态方法。

要么使它成为静态方法(但这取决于你的逻辑),要么直接调用它,因为你仍然在这个类中。

void TryCallPackageRecived()
{
    PackageRecived(); // my compiler error is here
}

答案 2 :(得分:0)

解决此问题的明显方法是将TryCallPackageRecived()添加到RS232课程中:

////////////////////////////////////////////      RS232.h File
class RS232
{
public:
    int value;
    int Connect();
    void PackageRecived();
    void TryCallPackageRecived();
    RS232();
    ~RS232();
};

////////////////////////////////////////////   RS232.cpp 

// [...]    
void RS232::TryCallPackageRecived()
{
    PackageRecived();
}
// [...]