对象分配-成员函数的使用无效错误

Object assignment - invalid use of member function error

本文关键字:无效 错误 函数 分配 成员 对象      更新时间:2023-10-16

我有一个类,它的成员中包括另一个类的对象。

头文件如下所示:

class LinxArduinoEthernetListener : public LinxListener
{
EthernetServer ArduinoTcpServer(uint16_t);

其中EthernetServer本身就是一个类(在ArduinoEthernetServer.h库中定义(。

因为我在编译时不知道端口,但服务器对象应该是侦听器类的成员,所以我允许在类构造函数中初始化服务器对象,然后尝试稍后使用以下代码(在相应的.cpp文件中(重新分配该对象:

ArduinoTcpServer = EthernetServer(port);

其中"port"是uint16_t。据我所知,这是将新建实例重新分配给对象变量的正确方法。

然而,编译器给了我以下错误:

LinxArduinoEthernetListener.cpp:122:错误:无效使用成员函数(你忘了"(("了吗?(

ArduinoTcpServer=以太网服务器((uint16_t(端口(;

我认为这可能与我在随后的函数调用中遇到的错误有关

LinxArduinoEthernetListener.cpp:123:错误:'((LinxArduinoEthernetListener*(this(->LinxAruinoEthernetPListener::ArduinoTcpServer'没有类类型

ArduinoTcpServer.begin((;

但我想说的是,它确实有一个类类型,即EthernetServer类,正如头文件中指定的那样。

我在这里做错了什么?

EthernetServer ArduinoTcpServer(uint16_t);声明了一个名为ArduinoTcpServer的成员函数。若要声明成员变量,请省略参数类型和圆括号。还添加一个构造函数来初始化成员变量,例如:

class LinxArduinoEthernetListener : public LinxListener
{
public:
EthernetServer ArduinoTcpServer;
LinxArduinoEthernetListener(uint16_t port)
: ArduinoTcpServer(port)
{
}
};

因此,问题在于服务器对象的声明。

最初,我宣布如下:

EthernetServer ArduinoTcpServer(22);

但我会得到一个关于"数字常量之前的预期标识符"的错误,指的是22。所以我在谷歌上搜索了一下,发现有人建议(在我不记得的某些上下文中(只指定类型就足以调用与该原型匹配的构造函数。这样做允许编译器继续,所以我认为这是有效的。然而,情况似乎并非如此。

真正的问题是Arduino IDE使用的编译器需要大括号初始化,例如

EthernetServer ArduinoTcpServer{22};

这似乎奏效了。