MrP*_*243 1 c++ compiler-errors function std
这就是我设置代码的方法:
class SomeClass
{
public:
std::function<void()> someFunction;
}
Run Code Online (Sandbox Code Playgroud)
AnotherClass.h
class AnotherClass
{
public:
void anotherFunction();
void yetAnotherFunction();
SomeClass someClass;
}
Run Code Online (Sandbox Code Playgroud)
AnotherClass.cpp
void AnotherClass::anotherFunction()
{
std::cout << "triggerd" << std::endl;
}
void AnotherClass::yetAnotherFunction()
{
someClass.someFunction = &AnotherClass::anotherFunction; //here
}
Run Code Online (Sandbox Code Playgroud)
这导致编译时错误:error C2664: 'std::_Func_class<_Ret>::_Set' : cannot convert parameter 1 from '_Myimpl *' to 'std::_Func_base<_Rx> *'经过一些研究后我发现这是来自VS2012(源)的错误.所以我将标有"here"的行更改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这显然不是我的功能.
有没有人知道为什么会这样,以及我如何解决它?
谢谢.
您正在为function期望返回void并且不带参数的对象分配非静态成员函数.非静态成员函数具有隐式的第一个参数,在这种情况下它是类型AnotherClass*.您需要一个AnotherClass实例绑定到成员函数.
在您的情况下,您可以将其绑定到this指针:
void AnotherClass::yetAnotherFunction()
{
someClass.someFunction = std::bind(&AnotherClass::anotherFunction, this);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2294 次 |
| 最近记录: |