繁体   English   中英

function 指针在 c++ class 抛出编译器错误

[英]function pointer in c++ class throws compiler error

我是 function 指针的新手,并试图将 function 指针作为参数从一个 class 传递给另一个指针并出现编译器错误。

'fncptr1':不是 class 或命名空间名称”

我究竟做错了什么?

fncptr1.h

#ifndef FNCPTR1
#define FNCPTR1

#include "fncptr2.h"
class fncptr1
{
  public:
    int addition(int a,int b);
    void testfncptr();  
};

#endif // !FNCPTR1

fncptr1.cpp文件

 #include "fncptr1.h"
 #include <iostream>

 using namespace std;

 int fncptr1::addition(int a,int b)
 {
   return a + b;
 }

 void fncptr1::testfncptr()
 {
    fncptr2 f;
    f.implfncptr(&addition);
 }

fncptr2.h

 #ifndef FNCPTR2
 #define FNCPTR2

 #include "fncptr1.h"
 class fncptr2
 {
   public:
      int implfncptr(int (fncptr1::*add)(int,int));
 };

 #endif // !FNCPTR2

fncptr2.cpp文件

  #include "stdafx.h"
  #include "fncptr2.h"
  #include <iostream>

  using namespace std;
  fncptr1 ff;

  int fncptr2::implfncptr(int (fncptr1::*add)(int, int))
  {
    return (ff.*add)(1,2);
  }

主.cpp

fncptr1 f;
f.testfncptr();
  • 从 all.h 文件中删除fncptr2.hfncptr1.h的包含。 而是将它们添加到fncptr1.cfncptr2.c中。
  • 你需要f.implfncptr(&fncptr1::addition); 而不是f.implfncptr(&addition); fncptr1.cpp

fncptr1.h

#ifndef FNCPTR1
#define FNCPTR1

class fncptr1
{
public:
  int addition(int a, int b);
  void testfncptr();
};

#endif // !FNCPTR1

fncptr2.h

#ifndef FNCPTR2
#define FNCPTR2

class fncptr1;

class fncptr2
{
public:
  int implfncptr(int (fncptr1::* add)(int, int));
};

#endif // !FNCPTR2

fncptr1.cpp文件

#include "fncptr1.h"
#include "fncptr2.h"
#include <iostream>

using namespace std;

int fncptr1::addition(int a, int b)
{
  return a + b;
}

void fncptr1::testfncptr()
{
  fncptr2 f;
  f.implfncptr(&fncptr1::addition);
}

fncptr2.cpp文件

#include "fncptr2.h"
#include "fncptr1.h"
#include <iostream>

using namespace std;
fncptr1 ff;

int fncptr2::implfncptr(int (fncptr1::* add)(int, int))
{
  return (ff.*add)(1, 2);
}

主.cpp

#include "fncptr1.h"

int main()
{
  fncptr1 f;
  f.testfncptr();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM