C++ c+中的函数指针增量说明+;

C++ c+中的函数指针增量说明+;,c++,function-pointers,C++,Function Pointers,我已经在cpp中编写了一个类Seat&我声明了一个函数指针。 下面给出了类的实现 Seat.cpp #include "StdAfx.h" #include "Seat.h" int Seat::count = FL; Seat::Seat(void) { seatId = Seat::count; seatStatus = unoccupied; Seat::count++; } Seat::~Seat(void) { } void Seat::*checkSeat

我已经在cpp中编写了一个类Seat&我声明了一个函数指针。 下面给出了类的实现

Seat.cpp

#include "StdAfx.h"
#include "Seat.h"

int Seat::count = FL;
Seat::Seat(void)
{
   seatId = Seat::count;
   seatStatus = unoccupied;
   Seat::count++;
}

Seat::~Seat(void)
{

}


void Seat::*checkSeatStatus(void)
{


}
座位h

#include <string>
using namespace std;

 class Seat :
    public Vehicle
{
    int seatId;
    int seatStatus;
    static int count;

public:
   Seat(void);
   ~Seat(void);
   void (*checkSeatStatus)();
};
#包括
使用名称空间std;
班级座位:
公共车辆
{
国际海洋贸易署;
int seatStatus;
静态整数计数;
公众:
座位(空);
~座位(空);
无效(*checkSeatStatus)();
};
它在函数指针声明处显示错误:

“checkSeatStatus”:非法使用类型“void”


背后的原因是什么,它是否需要初始化函数指针?

如果
checkSeatStatus
是一个成员函数,它应该是:

void* Seat::checkSeatStatus(void) {
    ...
}
在类声明中包含函数原型:

void* checkSeatStatus(void);
如果它是一个成员变量,包含一个可以设置的函数指针,那么,嗯,不要这样做。。。很可能是错误的设计

如果(根据名称)它只是返回当前值
status
,那么它应该是一个返回
int
而不是
void*
的函数:

int Seat::checkStatus(void) {
    return status;
}

注意:我从方法名称中删除了
Seat
,因为它应该是隐式的,因为您在
Seat
对象上调用了它。

如果
checkSeatStatus
是一个成员函数,它应该是:

void* Seat::checkSeatStatus(void) {
    ...
}
在类声明中包含函数原型:

void* checkSeatStatus(void);
如果它是一个成员变量,包含一个可以设置的函数指针,那么,嗯,不要这样做。。。很可能是错误的设计

如果(根据名称)它只是返回当前值
status
,那么它应该是一个返回
int
而不是
void*
的函数:

int Seat::checkStatus(void) {
    return status;
}

注意:我从方法名称中删除了
Seat
,因为它应该是隐式的,因为您在
Seat
对象上调用了它。

这并没有回答您提出的问题,但将显示如何在线程中使用该函数

使用它实际上很容易使用任何成员函数启动线程。重要的是它应该是一个普通的成员函数,声明如下

class Seat
{
    ...
public:
    ...
    void checkSeatStatus();
};
然后,要使用函数创建线程,首先需要类的实例:

Seat seat;
然后,您只需创建线程

std::thread my_thread{&Seat::checkSeatStatus, seat};
在主线程中执行任何其他处理,然后加入已创建的线程:

my_thread.join();

这里有两件重要的事情需要知道:
Seat
类的实例(上面的变量
Seat
必须比线程的寿命长。如果它超出范围并在线程结束之前被破坏,将导致未定义的行为


您还必须在线程对象(上面的变量
my_thread
)被销毁之前进行线程处理。

这不会回答您提出的问题,但会显示如何在线程中使用该函数

使用它实际上很容易使用任何成员函数启动线程。重要的是它应该是一个普通的成员函数,声明如下

class Seat
{
    ...
public:
    ...
    void checkSeatStatus();
};
然后,要使用函数创建线程,首先需要类的实例:

Seat seat;
然后,您只需创建线程

std::thread my_thread{&Seat::checkSeatStatus, seat};
在主线程中执行任何其他处理,然后加入已创建的线程:

my_thread.join();

这里有两件重要的事情需要知道:
Seat
类的实例(上面的变量
Seat
必须比线程的寿命长。如果它超出范围并在线程结束之前被破坏,将导致未定义的行为


您还必须在thread对象(上面的变量
my_thread
)被销毁之前执行tread操作。

您将
checkSeatStatus
声明为成员变量,而不是成员函数。因此,它应该初始化为指向某个可调用函数,但它不应该有函数体。检查座椅状态的目的是什么?它应该是一个实际的成员函数吗?它应该是一个变量吗?它是一个成员函数,所以它不应该是一个成员变量,而是一个成员函数,一个方法?它应该返回什么?“通用指针”(即
void*
)?什么都没有(即
void
)?还别的吗?它应该做什么?它将查找座椅的状态并设置成员变量seatStatusOh.:(.在考虑线程之类的高级功能之前,首先需要弄清楚
座椅实际上不是
车辆的子类,而是车辆“拥有”的东西。您将
checkSeatStatus
声明为成员变量,而不是成员函数。因此,它应该初始化为指向某个可调用函数,但不应该有函数体。
checkSeatStatus
的用途是什么?它应该是实际的成员函数吗?它应该是变量吗?它是成员函数,所以不应该是是一个成员变量,但却是一个成员函数、一个方法?它应该返回什么?一个“通用指针”(即
void*
)?什么都没有(即
void
)?返回其他东西?它应该做什么?它将找到seat的状态并设置成员变量seatStatusOh.:(.在考虑线程之类的高级功能之前,首先需要弄清楚
座椅实际上不是
车辆的子类,而是车辆“拥有”的东西.现在它显示了这个错误'Seat::checkSeatStatus':必须返回一个值,这并不奇怪,因为您声明了一个应该返回
void*
指针的函数。因为您没有说明该函数应该做什么,所以我没有对此进行评论,但鉴于
status
int
我希望您的函数实际上应该是
int-Seat::checkSeatStatus(void)
现在它显示了这个错误'Seat::checkSeatStatus':必须返回一个值,因为您声明了一个支持