无法将结构的函数指针调用到 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++;
}
}
};
您的代码的意图很难理解(以其当前形式)。但我很乐意解决您代码中的一些问题。
- 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
{ ... }
- 分配函数指针的语法不正确。你忘了 &:
_fdSet[cs].fct_read = &MS::client_read;
- fct_read和fct_write是成员函数指针。它们应该应用于 MS class 的实例。如果您想将它们应用于 this 对象:
if (i < 5) {
auto fptr = _fdSet[i].fct_read;
(this->*fptr)(i);
}
使用 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++;
}
}
};
您的代码的意图很难理解(以其当前形式)。但我很乐意解决您代码中的一些问题。
- 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
{ ... }
- 分配函数指针的语法不正确。你忘了 &:
_fdSet[cs].fct_read = &MS::client_read;
- fct_read和fct_write是成员函数指针。它们应该应用于 MS class 的实例。如果您想将它们应用于 this 对象:
if (i < 5) {
auto fptr = _fdSet[i].fct_read;
(this->*fptr)(i);
}