首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在类中调用函数

在类中调用函数
EN

Stack Overflow用户
提问于 2011-09-30 13:29:07
回答 3查看 184关注 0票数 1

我想在运行我的应用程序时更改"value“。但是当我在"RS232.cpp“中调用RS232::PackageRecived时,我再次出现了这个错误:

错误1错误C2352:'RS232::PackageRecived‘:非法调用非静态成员

代码语言:javascript
运行
复制
////////////////////////////////////////////   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();
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-30 14:10:06

您的函数"TryCallPackageRecived()“不是RS232类的成员。它试图调用非静态的RS232的成员函数。这是不允许的。当你想调用一个非静态成员函数时,你需要在一个特定的对象上调用它。

在这种情况下,您可以执行以下操作:

代码语言:javascript
运行
复制
RS.PackageRecived();

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

代码语言:javascript
运行
复制
void TryCallPackageRecived(RS232 *ptr)
{
   if(ptr != 0)
      ptr->PackageRecived(); 
}

... more code ...

int RS232::Connect()
{
    TryCallPackageRecived(this);
}
票数 1
EN

Stack Overflow用户

发布于 2011-09-30 13:34:34

这是因为PackageRecived不是静态方法,没有对象就不能调用非静态方法。

要么使它成为一个静态方法(但它取决于您的逻辑),要么直接调用它,因为您无论如何都在这个类中。

代码语言:javascript
运行
复制
void TryCallPackageRecived()
{
    PackageRecived(); // my compiler error is here
}
票数 0
EN

Stack Overflow用户

发布于 2011-09-30 14:20:45

解决这个问题的最明显的方法是在RS232类中添加TryCallPackageRecived()

代码语言:javascript
运行
复制
////////////////////////////////////////////      RS232.h File
class RS232
{
public:
    int value;
    int Connect();
    void PackageRecived();
    void TryCallPackageRecived();
    RS232();
    ~RS232();
};

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

// [...]    
void RS232::TryCallPackageRecived()
{
    PackageRecived();
}
// [...]    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7606277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档