0

我正在做一个项目,我必须通过 WiFi 模块接收 UDP 数据包并对其进行处理。但是,我仍然是 c/c++ 的初学者(学生)。在我的主文件main.cpp中,我使用了 UDPSocket 类来初始化我的模块和服务器之间的通信。

UDPSocket server(&eth);
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(&eth);   //Am getting an error for using this
extern char endpoint_name[16];
extern uint8_t ep_type[];
extern uint8_t lifetime_ptr[];

我的问题是如何使用我在主类中声明的同一个UDPSocket 服务器(ð) ?

我真的很感谢你的意见...

4

1 回答 1

3

对象的extern声明不应具有初始化程序,除非您希望声明是定义(在这种情况下,server是多重定义的,导致链接器错误)。通常,您会在声明中省略初始化程序,只在定义中使用它;初始化由定义对象的翻译单元完成。所以声明只是:

extern UDPSocket server;

extern对象声明有点像函数的前向声明。最佳做法是将这些放在头文件中。因此,您可能应该将externof 和其他变量的声明移动server到某个foo.h文件中,并将定义移动到foo.cpp, and havemain.cppprocessing.cppboth includefoo.h中。

于 2016-04-22T18:11:06.323 回答