2016-04-22 36 views
0

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

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)我在我的主类中声明?

我真的很感激您的输入...

回答

3

,除非你想要的声明是一个清晰的extern声明的对象不应该有初始值,(在这种情况下,server是多重定义,造成了链接器错误)。通常情况下,您将在声明中忽略初始值设定项,并仅在定义中使用它;初始化由定义对象的翻译单元完成。因此,声明将仅仅是:

extern UDPSocket server; 

extern对象声明有点像一个函数的预先声明。最好的做法是把它们放在头文件中。因此,您应该将声明server和其他变量转换为foo.h文件,并将定义转换为foo.cpp,并且main.cppprocessing.cpp均包含foo.h