2016-04-22 17 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); 
} 

問題は、私は私が私のmain.cppにして宣言したクラスのインスタンスのrecvにアクセスしたい私のprocessing.cppファイルである:私の質問はどのようにすることができますです

#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)私は私のメインクラスで宣言しましたか?あなたは宣言は定義をする場合を除き、オブジェクトのextern宣言は、初期化子を持つべきではない

答えて

3

私は本当にあなたの入力をお願いします

は...(その場合には、serverは乗算引き起こし、定義されていますリンカーエラー)。通常、宣言ではイニシャライザを省略し、定義にのみ置くことになります。初期化はオブジェクトが定義されている翻訳単位によって行われます。だから、宣言は、単純に次のようになります。

extern UDPSocket server; 

externオブジェクトの宣言は、関数の前方宣言のようなビットです。ベストプラクティスは、これらをヘッダーファイルに入れることです。したがって、の宣言をfoo.hファイルに置き換え、その定義をfoo.cppに移動し、main.cppprocessing.cppの両方にfoo.hが含まれるように、serverの宣言とその他の変数を移動する必要があります。

関連する問題