无法将结构的函数指针调用到 class 方法

Can not call function pointer of a struct to a class method

使用 C++98。我有一个结构 t_fd,它在 class MS 中使用。在结构中有两个指向函数的指针:fct_read, fct_write。我设计函数指针指向class的两个方法。但是当我试图打电话给他们时出现了这个错误。

expression preceding parentheses of apparent call must have (pointer-to-) function type.

错误之处请指教,设计也请指教。我需要这两个函数是 class 的方法,因为我需要使用 class 的属性(尽管为了简单起见这里没有显示)。感谢您的宝贵时间,非常感谢您的帮助!

#include <vector>
#include <iostream>

typedef struct  s_fd {
    void(MS::*fct_read) (int);
    void(MS::*fct_write) (int);
}   t_fd;

class MS
{
    private:
        std::vector< t_fd >            _fdSet;

        void        server_accept(int s)
        {
            if (s % 2 == 0)
                _fdSet[cs].fct_read = MS::client_read;
            else
                _fdSet[cs].fct_write = MS::client_write;
        }

        void        client_read(int fd)
        {
            std::cout << "I'm reading\n";
        }

        void        client_write(int fd)
        {
            std::cout << "I'm writing\n";
        }

        void        check_fd()
        {
            int i = 0;
            int size = 10;

            while (i < size)
            {
                if (i < 5)
                    _fdSet[i].fct_read(i); //Error here!
                if (i >= 5)
                    _fdSet[i].fct_write(i); //Error here!
                i++;
            }
        }
};

您的代码的意图很难理解(以其当前形式)。但我很乐意解决您代码中的一些问题。

  1. MS class 需要在引用它之前声明 s_fd 结构定义中的类型:
class MS; // forward declaration
    
typedef struct  s_fd {
void(MS::* fct_read) (int);
void(MS::* fct_write) (int);
}   t_fd;
    
class MS
{  ... }
  1. 分配函数指针的语法不正确。你忘了 &:
_fdSet[cs].fct_read = &MS::client_read;
  1. fct_readfct_write是成员函数指针。它们应该应用于 MS class 的实例。如果您想将它们应用于 this 对象:
if (i < 5) {
  auto fptr = _fdSet[i].fct_read;
  (this->*fptr)(i);
}