【问题标题】:Error when using extern in c++在 C++ 中使用 extern 时出错
【发布时间】:2016-04-22 18:05:21
【问题描述】:

我正在做一个项目,我必须通过 WiFi 模块接收 UDP 数据包并对其进行处理。但是,我仍然是 c/c++ 的初学者(学生)。 在我的主文件 ma​​in.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)

非常感谢您的意见...

【问题讨论】:

    标签: c++ c mbed


    【解决方案1】:

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

    extern UDPSocket server;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2020-08-11
      相关资源
      最近更新 更多