2016-04-22 82 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