我正在使用带有以太网的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
}
有人有想法吗?
答案 0 :(得分:0)
不要将ServerObject
声明为指针,然后使用初始化列表创建实例。
这是你的构造函数的样子:
CommunicationModuleTCPIP::CommunicationModuleTCPIP(/*...*/)
:ServerObject(5000)
{
/* code */
}
This page包含有关初始值设定项的一些信息。
请注意,arduino上的C ++是有限的。特别是您没有STL和new
以及delete
are not implemented。