前言
实习时编写一个TCP客户端,要求设置一个回调函数
查了下,回调函数不能是成员函数,但可以是静态成员函数或者是友元函数
于是把这个回调函数设置成了静态成员函数,但函数内又调用了该类的某个成员变量
而静态成员函数只能调用同为静态的成员函数和成员变量
所以又把这个成员变量也设置为静态
本以为这样就对了,起码vs2019不会出现红色波浪线了
但还是出现了报错
代码如下
TCPClient.h
class TCPClient
{
private:
static SOCKET sclient;
public:
static void RecvData(char* buffer, int len);
}
TCPClient.cpp
void TCPClient::RecvData(char* buffer,int len) {
int ret = recv(sclient, buffer, len, 0);
}
解决方法
在TCPClient.cpp
中,给静态成员变量初始化,报错就消失了
SOCKET TCPClient::sclient = 0;