我在对象上调用一些非const成员函数时遇到问题。 我们的想法是在给定对象上调用成员函数。这适用于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;
}
如何更改我的代码,以便我可以调用这样的非const函数?
答案 0 :(得分:4)
您在未初始化的testFunction1
变量指向的对象上调用testFunction2
Test *test;
,导致两种情况下都出现未定义的行为。通过更改testFunction2
来调用testVal
尝试访问对象存储,因此显然会导致崩溃。您应该提供指向有效对象的指针:
callTestFunction(this); // no need for Test:: prefix
同样testFunction1
testFunction2
都不是const
,您需要实际添加限定符:
void testFunction1() const