加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C从函数定义所在的类中的函数指针向量中调用函数

发布时间:2020-12-16 03:12:18 所属栏目:百科 来源:网络整理
导读:好的,在我的主要我有: void somefunction();int main(){ //bla bla bla SomeClass myclass = SomeClass(); void(*pointerfunc)() = somefunction; myclass.addThingy(pointerfunc); //then later i do myclass.actionWithDiffrentOutcomes();}void somefunc
好的,在我的主要我有:
void somefunction();
int main()
{
    //bla bla bla
    SomeClass myclass = SomeClass();
    void(*pointerfunc)() = somefunction;
    myclass.addThingy(pointerfunc);

    //then later i do
    myclass.actionWithDiffrentOutcomes();
}

void somefunction()
{
    //some code
}

在课堂上:

class SomeClass()
{
    public:
        void addThingy(void (*function)());
        void actionWithDiffrentOutcomes();
    private:
        std::vector<void (**)()> vectoroffunctions;
}
SomeClass::addThingy(void (*function)())
{
    vectoroffunctions.push_back(&function);
}
SomeClass::actionWithDiffrentOutcomes()
{
    (*vectoroffunctions[0])();;
}

我是一个新的指针,但我读了我的c书,谷歌,分机.这似乎是正确的,编译,运行,但当我调用“actionWithDiffrentOutcomes()”我得到访问冲突.我不知道该怎么办这似乎是正确的,但事情显然是错误的.那么当定义在另一个类中时,怎么能从类中调用一个函数?

我这样做是因为我不能将每个选项硬编码到一个switch语句中.

解决方法

你的代码几乎是正确的.你的向量错误地指向指向函数的指针,而不是简单地指向函数. addThingy将函数指针的地址添加到向量中,但是该指针在下一行中超出范围.

更改你的代码如下:

//Store pointers to functions,rather than
//pointers to pointers to functions
std::vector<void (*)()> vectoroffunctions;

SomeClass::addThingy(void (*function)())
{
    //Don't take the address of the address:
    vectoroffunctions.push_back(function);
}

而且,在其余的代码中你会有很多语法错误,这些错误应该停止代码甚至编译.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读