gpt4 book ai didi

C++ 从函数定义在 main 中的类中的函数指针 vector 调用函数

转载 作者:可可西里 更新时间:2023-11-01 15:00:10 28 4
gpt4 key购买 nike

好吧,我主要有:

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 语句中。

最佳答案

您的代码几乎是正确的。您的 vector 错误地持有指向函数指针的指针,而不是简单地指向函数的指针。 addThingyfunction 指针的地址添加到 vector 中,但该指针在下一行中超出了范围。

按如下方式更改您的代码:

//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);
}

此外,您在其余代码中有很多语法错误,这些错误甚至会阻止代码编译。

关于C++ 从函数定义在 main 中的类中的函数指针 vector 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15128444/

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