这就是我的代码设置方式:
class SomeClass
{
public:
std::function<void()> someFunction;
}
另一个类.h
class AnotherClass
{
public:
void anotherFunction();
void yetAnotherFunction();
SomeClass someClass;
}
另一个类.cpp
void AnotherClass::anotherFunction()
{
std::cout << "triggerd" << std::endl;
}
void AnotherClass::yetAnotherFunction()
{
someClass.someFunction = &AnotherClass::anotherFunction; //here
}
这导致了编译时错误:error C2664: 'std::_Func_class<_Ret>::_Set' : cannot convert parameter 1 from '_Myimpl *' to 'std::_Func_base<_Rx> *'
经过一些研究,我发现这是来自 VS2012(源代码)的错误。因此,我将标有“此处”的行更改为someClass.someFunction = std::mem_fn(&AnotherClass::anotherFunction);
就像链接中的解决方案一样。但是,现在这会导致另一个编译时错误:error C2562: 'std::_Callable_obj<_Ty>::_ApplyX' : 'void' function returning a value
. 因此,根据我对该错误的研究,这意味着有一个声明为 void 的函数返回一个值。这就是我卡住的地方,因为我 100% 确定我没有任何函数返回不应该加上的值,而且在更改标记为“here”的行之前我没有收到此错误。我不确定这是否是 VS2012 中的另一个错误,但错误确实说:std::_Callable_obj<_Ty>::_ApplyX
这显然不是我的功能。
有没有人知道为什么会发生这种情况以及我如何解决它?
谢谢。