【发布时间】:2020-01-26 17:49:30
【问题描述】:
我有以下课程:
#include <functional>
class Foo{
private:
const &int a;
bool continueloop(){
return (a>5);
}
bool runLoop(std::function<bool()> func){
while(func()){
a=a-1;
}
return(true);
}
public:
bool run(){
runLoop(this->continueloop);
return(true);
}
};
我得到以下编译错误:
In member function ‘bool Foo::run()’:
error: invalid use of non-static member function ‘bool Foo::continueloop()’
runLoop(this->continueloop);
note: declared here
bool continueloop(){
^~~~~~~~~~~
但是,我不想让 continue 成为静态。是什么导致了这个错误,我该如何解决?
【问题讨论】:
-
函数
run和runLoop不返回任何内容。 -
const &int a;- 引用类型的成员变量通常是个坏主意。 -
continue不是函数。它是一个类方法。所示代码尝试将指向返回bool的类方法的指针转换为指向返回bool的函数的指针(用于构造std::function)。这就是编译错误的原因。所示代码的总体目的有些不清楚,因此不清楚建议的修复应该是什么。 -
使用 lambda
[this]{ return this->continueLoop(); }代替指向方法的指针。 -
continue是该语言使用的保留关键字。