【问题标题】:C++ Using Object with pass function [closed]C ++使用带有传递函数的对象[关闭]
【发布时间】:2015-07-03 08:21:50
【问题描述】:

我正在尝试用其他对象构建一个对象并传递函数


抱歉描述不清楚 问题是如果 TESTobj 是其他对象,我构建新对象(Gradebook)并使用 TESTobj 传递函数,传递没有对象的函数没问题但是在对象里面会报错

error: no matching function for call to ‘TESTobj::SET(void (GradeBook::*)())’

no known conversion for argument 1 from ‘void (GradeBook::*)()’ to ‘void (*)()’

这里是示例:

void TESTobj::SET(void (*nu)())
{//point the function
    this->nu=nu;
}

void TESTobj::Test()
{//implement the function
    (*nu)();
}

void GradeBook::Grade()
    {//the function I build
        cout << "HELLO" <<endl;
    }
void GradeBook::Set()
    {
        OBJ.SET(&GradeBook::Grade);//GotProblemHere
        OBJ.Test();
    }

【问题讨论】:

  • 你的问题到底是什么?

标签: c++ object


【解决方案1】:

GradeBook::Grade是一个非静态成员函数,它需要对GradeBook的一个实例进行操作。您不能将其传递给需要普通函数指针的函数。

您可以将 TESTobj::SET 更改为接受 std::function 对象,然后将您的成员函数包装在 lambda 中:

void TESTobj::SET(std::function<void()> nu)

void GradeBook::Set()
{
    OBJ.SET([this](){Grade();});
    OBJ.Test();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多