【问题标题】:Not able to call a function using function pointer [duplicate]无法使用函数指针调用函数[重复]
【发布时间】:2012-12-28 11:54:45
【问题描述】:

可能重复:
How to call a function using pointer-to-member-function

分析器.h

class Analyzer
{
public :

    void viku();
    void Bibek();
    void vivek();
    void (Analyzer::*point)();

    Analyzer(){

    }
    ~Analyzer(){

    }

};

分析器.cpp

    using namespace std     
    #include"Analyzer.h"
    void Analyzer::viku(){
        cout<<"Hello viku";
    }
    void Analyzer::vivek(){
        point =&Analyzer::viku; 
        Bibek();   
    }
    void Analyzer::Bibek(){
           point();//Errror
        cout<<"Bibek";
    }

在编译过程中显示以下错误:

错误 C2064:术语不计算为采用 0 个参数的函数。

谁能告诉我如何避免这种情况?

【问题讨论】:

  • 您应该阅读本书中有关指向成员函数的指针的章节,因为那不是普通的函数指针。 -1 表示没有先前的研究。
  • 我读了它,但仍然无法找出这就是我在此处发布此内容的原因。根据我的说法,我所做的一切都是正确的 1-函数指针和函数的签名都是相同的。以及调用约定。那我在哪里得到问题?
  • 与您的问题无关,但很重要:避免在头文件中使用using namespace,更好的是:根本不要使用它。这可能会导致命名冲突。
  • @LightnessRacesinOrbit:看起来他理解其中的区别,但并不是说point(); 不适用于viku(); 的成员函数。 +1 提出一个合理的问题。
  • @MikeSeymour:请将鼠标悬停在反对票图标上,并注意缺乏研究是反对票的原因。如何使用指向成员函数的指针在任何优秀的 C++ 书籍中都有介绍,因此这里不需要再次询问。或者,如果没有别的,那就是重复的。

标签: c++ function-pointers


【解决方案1】:

指向成员函数的指针与普通函数指针不同。你需要一个实例来调用它们:

#include <iostream>

class A
{
public:
  int foo()
  {
      std::cout << "A::foo here, you can have 42" << std::endl;
      return 42;
  }
};

int main ()
{
  int (A::* point)() = &A::foo;
  A a;

  (a.*point)();
}

在您的情况下,您需要执行以下操作:

(this->*point)()

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 2016-01-05
    • 2012-01-04
    • 1970-01-01
    • 2020-08-07
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多