【问题标题】:Object assignment - invalid use of member function error对象赋值 - 无效使用成员函数错误
【发布时间】:2018-07-14 03:35:10
【问题描述】:

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

头文件如下所示:

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

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

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

ArduinoTcpServer = EthernetServer(port);

其中“端口”是一个 uint16_t。据我所知,这是将新构造的实例重新分配给对象变量的正确方法。

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

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

ArduinoTcpServer = EthernetServer((uint16_t)port);

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

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

ArduinoTcpServer.begin();

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

我在这里做错了什么?

【问题讨论】:

  • 错字:改成EthernetServer ArduinoTcpServer(some_value);
  • 当声明一个对象时,你必须输入值,而不是类型。
  • 如果你要在构造函数中初始化它,那么创建一个指针:EthernetServer *ArduinoTcpServer; 并在构造函数中:ArduinoTcpServer = new EthernetServer(some_port)
  • 我希望我可以就您的 -1 请求仲裁。这是一个格式正确的问题,我假设您认为我没有尝试过。将其声明为“EthernetServer ArduinoTcpServer(22);”给出另一个编译器错误:数字常量 EthernetServer ArduinoTcpServer(22) 之前的预期标识符;错误:数字常量前应有“,”或“...”
  • 在 AVR gcc 中默认没有实现“new”。因此我宁愿避免它。

标签: c++ arduino


【解决方案1】:

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

class LinxArduinoEthernetListener : public LinxListener
{
    public:
        EthernetServer ArduinoTcpServer;

        LinxArduinoEthernetListener(uint16_t port)
        : ArduinoTcpServer(port)
        {
        }
};

【讨论】:

  • 谢谢,我试图记住如何做到这一点,但我的 google-fu 让我失望了。
【解决方案2】:

所以,问题在于服务器对象的声明。

最初,我将其声明如下:

EthernetServer ArduinoTcpServer(22);

但是我会得到一个关于“数字常量之前的预期标识符”指的是 22 的错误。所以我用谷歌搜索了它,发现有人建议(在某些情况下我不记得)只指定类型就足以调用与该原型匹配的构造函数。这样做允许编译器继续,所以我认为这是有效的。不过好像没有。

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

EthernetServer ArduinoTcpServer{22};

这似乎行得通。

【讨论】:

    猜你喜欢
    • 2013-06-27
    • 2019-05-13
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多