0

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);
}

問題は、私の 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 サーバー (ð)をどのように使用できるかということです。

私はあなたの入力に本当に感謝しています...

4

1 に答える 1

3

宣言を定義にする場合を除き、オブジェクトのextern宣言には初期化子を含めないでください (その場合、server複数定義され、リンカ エラーが発生します)。通常、宣言ではイニシャライザを省略し、定義だけに含めます。初期化は、オブジェクトが定義されている翻訳単位によって行われます。したがって、宣言は次のようになります。

extern UDPSocket server;

externオブジェクト宣言は、関数の前方宣言に少し似ています。ベスト プラクティスは、これらをヘッダー ファイルに入れることです。したがって、およびその他の変数のextern宣言をいくつかのファイルに移動し、定義を に移動する必要があります。serverfoo.hfoo.cppmain.cppprocessing.cppfoo.h

于 2016-04-22T18:11:06.323 に答える