0

我正在使用带有 ethernetshield 的 Arduino。我已经创建了一个通信类,其中我声明了一个服务器对象(来自以太网库)。现在我想在类构造函数中初始化这个对象。对象的构造函数接受一个参数(int portnumber)。

所做的如下:

在头文件中将服务器对象声明为指针 (*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);
}

更新

在尝试了克雷格的建议后,我得到了一些新的编译器错误:

但没有我得到以下错误:C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModule\CommunicationModuleTCPIP.cpp:12: 错误:没有匹配函数调用'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 类的 nog 构造函数。但是我通过执行以下操作在初始化列表中给出了这个参数:

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 回答