gpt4 book ai didi

c++ - 在对象上调用非常量成员函数指针

转载 作者:行者123 更新时间:2023-11-27 22:41:55 25 4
gpt4 key购买 nike

我在调用对象上的一些非 const 成员函数时遇到问题。这个想法是在给定的对象上调用成员函数。这适用于 const 函数,但如果我有一些非常量函数并尝试更改它们内部的值,程序会崩溃,退出代码 = 3221225477

#include <functional>
#include <iostream>
struct Test
{
int testVal = 0;
/* Call a given function on 10 objects */
void callFunctionOnMultipleObjects(void (Test::*func)())
{
for(int i=0;i < 10; i++)
{
Test *test;
Test::callTestFunction = func;
Test::callTestFunction(test);
}
std::cout << "**************** \n";
}

/* Test Functions */
void testFunction1(){
std::cout << "some const/static action \n";
}
void testFunction2(){
std::cout << "non const/static action \n";
/* The Program crashes here */
testVal ++;
}
std::function<void(Test *)> callTestFunction;
};
int main()
{
Test test;
test.callFunctionOnMultipleObjects(&Test::testFunction1);
test.callFunctionOnMultipleObjects(&Test::testFunction2);
return 0;
}

我怎样才能更改我的代码,以便我可以像这样调用非常量函数?

最佳答案

您正在对未初始化的 Test *test; 变量指向的对象调用 testFunction1 testFunction2,这两种情况都会导致未定义的行为。调用 testFunction2 会尝试通过更改 testVal 来访问对象存储,因此这显然会导致崩溃。您应该改为提供指向有效对象的指针:

callTestFunction(this); // no need for Test:: prefix

同时 testFunction1 testFunction2 都不是const,你需要实际添加限定符:

void testFunction1() const

关于c++ - 在对象上调用非常量成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48280421/

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