0

私はイーサネットシールドを使用してArduinoを使用しています。サーバーオブジェクトを宣言する通信クラスを作成しました(イーサネットライブラリから)。ここで、クラス コンストラクターでこのオブジェクトを初期化します。オブジェクトのコンストラクターは、1 つのパラメーター (int ポート番号) を取ります。

行ったことは次のとおりです。

ヘッダー ファイルでは、サーバー オブジェクトをポインター (*Server) として宣言します。

 EthernetServer *ServerObject;

そして、コミュニケーター クラス コンストラクターで、次のようにオブジェクトを初期化します。

  *ServerObject = EthernetServer(5000);

問題は、ServerObject のコンストラクターが常にパラメーターを必要とするため、ヘッダーファイルで単純に宣言できないことです。

ヒントやヘルプは大歓迎です!前もって感謝します!

通信クラスのヘッダー ファイルは次のようになります。

class CommunicationModuleTCPIP : public CommunicationModule
{
public:

CommunicationModuleTCPIP(byte MacAdress[], IPAddress ServerIPServerIPAdress,     int             ServPort,     bool Server);
CommunicationModuleTCPIP();

int Connect();
void Send();
void Recieve();
void SendBuffer(char Buffer[], int Size);
void RecieveBuffer(char Buffer[], int Size);

byte Mac[];
IPAddress ServerIP;
int ServerPort;

EthernetClient Client;
EthernetServer *ServerObject;


    private:
};

そして、クラス コンストラクターは次のようになります。

    Serial.begin(9600);
delay(1000);
char Buffer[10];

Serial.println("Setting up server");

// the router's gateway address:
byte gateway[] = { 192, 168, 1, 1 };
// the subnet:
byte subnet[] = { 255, 255, 255, 0 };

*ServerObject = EthernetServer(5000);

//Mac = byte[] { 0x90, 0xA2, 0xDA, 0x0D, 0xA4, 0x13 };   //physical mac address
for (int Index = 0; Index < 6; Index++) {
    Mac[Index] = MacAdress[Index];
};

ServerIP = ServerIPAdress; // IP Adress to our Server
ServerPort = ServPort;

// initialize the ethernet device
Ethernet.begin(Mac, ServerIP, gateway, subnet);

// start listening for clients
this.ServerObject.begin();

Serial.println("Server setup");

// if an incoming client connects, there will be bytes available to read:
Client = ServerObject.available();
if (Client.connected()) {
    Serial.println("client connected");
    // read bytes from the incoming client and write them back
    // to any clients connected to the server:

    RecieveBuffer(Buffer, 10);

    Serial.print(Buffer);
}

アップデート

Craig の提案を試した後、いくつかの新しいコンパイラ エラーが発生します。

しかし、いいえ、次のエラーが発生しました: C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModule\CommunicationModuleTCPIP.cpp:12: error: no matching function for call to 'EthernetServer::EthernetServer()' C:\Program Files (x86)\Arduino\libraries\Ethernet/EthernetServer.h:14: 注意: 候補は EthernetServer::EthernetServer(uint16_t) C:\Program Files (x86)\Arduino\libraries\Ethernet/EthernetServer.h:9: 注意: EthernetServer::EthernetServer(const EthernetServer&)

これを解決する方法はありますか?私の理解では、パラメーターのない Ethernetserver クラスのコンストラクターはありません。しかし、次のようにして、初期化リストでこのパラメーターを指定しています。

CommunicationModuleTCPIP::  CommunicationModuleTCPIP(byte MacAdress[], IPAddress ServerIPAdress, int ServPort, bool Server)
:ServerObject(5000)
 {
   // Code
 }

誰かアイデアがありますか?

4

1 に答える 1

0

ServerObjectポインターとして宣言してから、初期化子リストを使用してインスタンスを作成しないでください。

コンストラクタは次のようになります。

CommunicationModuleTCPIP::CommunicationModuleTCPIP(/*...*/)
    :ServerObject(5000)
{
   /* code */
}

このページには、イニシャライザに関する情報が含まれています。

arduino の C++ には制限があることに注意してください。特に、STLがなく、実装されていませnewん。delete

于 2013-10-18T18:55:20.113 に答える