我正在开发一个项目,我必须通过WiFi模块接收UDP数据包并进行处理。但是,我仍然是c / c ++(学生)的初学者。 在我的主文件 main.cpp 中,我使用UDPSocket类初始化模块和服务器之间的通信。
UDPSocket server(ð);
static void nsp_init()
{
NSDL_DEBUG("name: %s", endpoint_name);
server.open("xxx.xxx.xxx.xxx", xxxx);
NSDL_DEBUG("name: %s", endpoint_name);
NSDL_DEBUG("EP:%s\n", endpoint_name);
}
问题出在我的 processing.cpp 文件中,我想访问我在main.cpp中声明的类的recv实例:
#include "ESP8266Interface.h"
#include "UDPSocket.h"
extern Serial pc;
extern ESP8266Interface eth;
extern UDPSocket server(ð); //Am getting an error for using this
extern char endpoint_name[16];
extern uint8_t ep_type[];
extern uint8_t lifetime_ptr[];
我的问题是如何使用我在主类中声明的 UDPSocket服务器(& eth)?
我真的很感激你的意见......
答案 0 :(得分:3)
对象的extern
声明不应该有初始值设定项,除非您希望声明是一个定义(在这种情况下,server
被多重定义,导致链接器错误)。通常情况下,您可以在声明中省略初始化程序,并仅在定义中使用它;初始化由定义对象的转换单元完成。所以声明只是:
extern UDPSocket server;
extern
对象声明有点像函数的前向声明。最佳做法是将这些文件放在头文件中。因此,您应该将extern
和其他变量的server
声明移到某个foo.h
文件中,将定义移到foo.cpp
中,并main.cpp
和{{1}两者都包含processing.cpp
。