在 C++ 中使用 extern 时出错

Error when using extern in c++

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

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 文件中,我想访问我在 [=27= 中声明的 class 的 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[];

我的问题是如何使用我在主 class?

中声明的相同 UDPSocket 服务器(ð)

非常感谢您的意见...

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

extern UDPSocket server;

extern对象声明有点像函数的前向声明。最佳做法是将它们放在头文件中。因此,您可能应该将 server 和其他变量的 extern 声明移动到某个 foo.h 文件中,并将定义移动到 foo.cpp 中,并具有 main.cppprocessing.cpp 都包括 foo.h.