【问题标题】:Using function members in functionals in c++ [closed]在 C++ 中的函数中使用函数成员 [关闭]
【发布时间】: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 成为静态。是什么导致了这个错误,我该如何解决?

【问题讨论】:

  • 函数runrunLoop 不返回任何内容。
  • const &amp;int a; - 引用类型的成员变量通常是个坏主意。
  • continue 不是函数。它是一个类方法。所示代码尝试将指向返回bool 的类方法的指针转换为指向返回bool 的函数的指针(用于构造std::function)。这就是编译错误的原因。所示代码的总体目的有些不清楚,因此不清楚建议的修复应该是什么。
  • 使用 lambda [this]{ return this-&gt;continueLoop(); } 代替指向方法的指针。
  • continue是该语言使用的保留关键字。

标签: c++ class


【解决方案1】:

首先continue 是一个已经被占用的关键字,所以最好重命名你的函数。

continue 语句应仅出现在迭代语句中,并使控制传递到最小的封闭迭代语句的循环继续部分,即循环结束。

在我们的例子中,您尝试将非静态成员函数用作静态成员函数。要修复它,您可以使用 lambda runLoop([this] { return your_func_name(); });

附:您仍然会收到错误,因为您有未初始化的 ref-member 并且您在类定义后错过了;

【讨论】:

    【解决方案2】:

    代码中有很多语法错误和缺少#include,直到主题中的错误。这是对社区的不尊重。

    解决办法是

    runLoop(std::bind(&Foo::continueloop, this));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多