gpt4 book ai didi

c++ - 从一个类调用另一个类的成员函数

转载 作者:行者123 更新时间:2023-11-30 02:52:46 33 4
gpt4 key购买 nike

我有一大段代码有这个问题,其中有一些事件处理对象。在事件处理类中,我试图通过指针调用另一个类的函数,但它与我实现的这段代码有相同的错误,只是检查我用来调用那里的逻辑。我在这里做错了什么?

#include <iostream>
using namespace std;
class FunctionPointer;
class UseFP
{
public:
UseFP(void){}
~UseFP(void){}

void Modified(int m,int n);
void (FunctionPointer::*update)(int,int);

};

void UseFP::Modified(int m,int n)
{
//(this->*update)(m,n);// call by fp if I uncomment it it gives error.
}

class FunctionPointer
{
int a,b;
UseFP * obj;
public:
FunctionPointer(void);

~FunctionPointer(void);

void updateData(int m, int n)
{
a = m;
b = n;
cout<<"\n\nUpdated: a "<<a<<", b "<<b<<endl;
}

void Input()
{
int m, n;
cout<<"\nEnter new data: ";
cin>>m>>n;
obj->Modified(m,n);
}
};

void main()
{
FunctionPointer obj;
obj.Input();
}

取消注释函数调用后的错误

1>------ Build started: Project: FunctionPointer, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>c:\users\volmo\desktop\functionpointer\functionpointer\functionpointer.h(14) : error C2440: 'newline' : cannot convert from 'UseFP *const ' to 'FunctionPointer *const '
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\users\volmo\desktop\functionpointer\functionpointer\functionpointer.h(14) : error C2647: '->*' : cannot dereference a 'void (__thiscall FunctionPointer::* )(int,int)' on a 'UseFP *const '
1>Generating Code...
1>Compiling...
1>FunctionPointer.cpp
1>c:\users\volmo\desktop\functionpointer\functionpointer\functionpointer.h(14) : error C2440: 'newline' : cannot convert from 'UseFP *const ' to 'FunctionPointer *const '
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\users\volmo\desktop\functionpointer\functionpointer\functionpointer.h(14) : error C2647: '->*' : cannot dereference a 'void (__thiscall FunctionPointer::* )(int,int)' on a 'UseFP *const '
1>Generating Code...
1>Build log was saved at "file://c:\Users\volmo\Desktop\FunctionPointer\FunctionPointer\Debug\BuildLog.htm"
1>FunctionPointer - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

最佳答案

update 被类型化为“指向类 FunctionPointer 的成员函数的指针。这意味着它需要 FunctionPointer 实例在 ->*。但您正尝试使用类型为 UseFPthis 取消引用它。因此出现错误。

您需要一个 FunctionPointer 的实例来调用它的 update。我不知道您想要的语义是什么,但是获得语义的一种方法是向 Modified 添加一个参数:

void UseFP::Modified(FunctionPointer &fp, int m,int n)
{
(fp.*update)(m,n);
}

关于c++ - 从一个类调用另一个类的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18607075/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com