在头文件Arduino以太网中声明Server对象

时间:2013-10-18 17:05:04

标签: c++ arduino

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

做了以下事情:

在头文件中将服务器对象声明为指针(* Server)。

 EthernetServer *ServerObject;

在communicator类构造函数中,我初始化了这样的对象:

  *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:错误:没有匹配函数来调用&#39; EthernetServer :: EthernetServer() &#39; 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&amp;)

你知道如何解决这个问题吗?根据我的理解,它表示没有任何参数的Ethernetserver类的nog构造函数。但我通过执行以下操作在初始化列表中提供此参数:

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

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

不要将ServerObject声明为指针,然后使用初始化列表创建实例。

这是你的构造函数的样子:

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

This page包含有关初始值设定项的一些信息。

请注意,arduino上的C ++是有限的。特别是您没有STL和new以及delete are not implemented