【问题标题】:Assigning a class's member function to a function pointer in C++将类的成员函数分配给 C++ 中的函数指针
【发布时间】:2020-04-29 04:28:54
【问题描述】:

我已将函数分配给变量

p_samplen_->onData = onData;

PVOID onData(PVOID args) {

}

它成功了。

我试图将此变量分配给类中的一个函数,但它不起作用。

p_samplen_->onData = &MyClass::onData;

PVOID MyClass::onData(PVOID args) {

}

错误是

test.cpp:32:48: error: assigning to 'startRoutine' (aka 'void *(*)(void *)') from incompatible type 'void *(MyClass::*)(void *)'

请帮帮我。

【问题讨论】:

  • 可能是 stackoverflow.com/questions/2402579/… 的副本。你应该考虑std::function
  • 错误信息告诉你:它们是不兼容的类型。 MyClass::onData 需要 MyClassint 才能被调用

标签: c++ function class


【解决方案1】:

您的语法可能不正确。成员指针是与普通指针不同的类型类别。成员指针必须与其类的对象一起使用:

#include <iostream>

class MyClass 
{
public:
    void *f(void *);
    void *(MyClass::*x)(void *); // <- declare by saying what class it is a pointer to
};

void *MyClass::f(void *ptr) 
{
    return ptr;
}


int main() 
{
    MyClass a;
    a.x = &MyClass::f; // use the :: syntax
    int b = 100;
    std::cout << *(int *)((a.*(a.x)) (&b)) << std::endl;
    return 0;
}

您可以在 C++ 中使用 functionalbind

例子:

#include <iostream>

#include <functional>

class MyClass 
{
public:
    void *f(void *);
    std::function<void *(void *)> function;
};

void *MyClass::f(void *ptr) 
{
    return ptr;
}


int main() 
{
    int b = 100;

    MyClass a;
    a.function = std::bind(&MyClass::f, &a, &b);
    std::cout << *(int *)a.function(&b) << std::endl;
    return 0;
}

【讨论】:

  • 查看已编辑的。如果它解决了您的问题,请不要忘记点赞并接受它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多