【问题标题】:Passing class function pointer to another class将类函数指针传递给另一个类
【发布时间】:2013-12-17 23:49:38
【问题描述】:

我有以下内容:

typedef void(*ptrFcn)(); //also I tried typedef void(B::*ptrFcn)()
class A {
....
void call(ptrFcn Fcn);
...
}

到这里为止,没有问题..一个简单的类的定义

class B{
A var;
...
void theFunction();  //until here, there is no problem
void theCurse();     //this is the problem
}
----- B.cpp -------
void B:: theCurse(){
//a lot of instructions
//here, I need to invoke theFunction without be a static function
var.call(theFunction);  //<--- wrong
}

所有这些说明都可以在不使用类的情况下工作,但两个类都是强制性的:(我使用的是 Visual Studio 2012。

谢谢你:)

【问题讨论】:

    标签: c++ class pointers


    【解决方案1】:

    您需要应用一些更改:

    1. 在定义typedef之前声明Bclass,这样你就可以声明一个指向成员函数的指针:

      class B;
      typedef void (B::*ptrFcn)();
      
    2. 当调用A::call() 时,您需要获取一个完全限定名称的地址:

      var.call(&B::theFunction);
      

    显然,要使B::theFunctionA 有用,您还需要知道B 对象。

    【讨论】:

    • 谢谢迪特玛。好吧,1) 是必要的,因为它不会编译。使用 2) 它在 B.cpp 中有效,但在使用 Fcn 变量的 A.cpp(调用函数中)中存在错误。错误是 term 不计算为采用 0 个参数的函数
    • 您可能还需要创建B::theFunction() static,否则,如果没有B 的实例或子类的对象,您将无法调用它...跨度>
    • 我解决了调用 Fcn 而不是 Fcn() 的问题(就像我一样)。现在,我还有其他因使用 &B::Function 而导致的内存问题。谢谢
    • 好吧,如果B 是静态的,那么我所有的变量也必须是静态的。而且我的代码会很乱:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2018-02-06
    • 2015-05-09
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    相关资源
    最近更新 更多