在c ++中使用extern时出错

时间:2016-04-22 18:05:21

标签: c++ c mbed

我正在开发一个项目,我必须通过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服务器(& eth)

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

1 个答案:

答案 0 :(得分:3)

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

extern UDPSocket server;

extern对象声明有点像函数的前向声明。最佳做法是将这些文件放在头文件中。因此,您应该将extern和其他变量的server声明移到某个foo.h文件中,将定义移到foo.cpp中,并main.cpp和{{1}两者都包含processing.cpp