对象分配-成员函数的使用无效错误
Object assignment - invalid use of member function error
我有一个类,它的成员中包括另一个类的对象。
头文件如下所示:
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};
这似乎奏效了。
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- what(): basic_string::_M_construct 空无效错误
- C++ Linux 运行时basic_string::_M_construct null 无效错误
- 调用boost v1.58中的函数时出现模板名称使用无效错误
- 对象分配-成员函数的使用无效错误
- 从 WindowsAPI 调用 NetLocalGroupAddMembers 时,安全 ID 结构无效错误
- 为什么映射迭代器显示基本操作数无效错误
- 获取数组类型的无效错误
- 调用 vector.erase() 函数时指针操作无效错误
- C++:basic_string::_M_construct 空,对于图形 BFS 算法无效错误
- C++运行程序后给我 basic_string::_S_construct null 无效错误
- 使用 std::vector 时抽象类类型"Shape"的新表达式无效错误
- mmap 错误:分段错误/指针无效错误
- 从字符到字符编译器的转换无效错误
- 恒常性添加无效?错误:无法使用字符**初始化常量字符**
- 二进制表达式的操作数无效错误消息
- "从'文件* {aka _iobuf}'到'int'的转换无效"错误
- 在 boost 中序列化二进制数据失败,并出现"签名无效"错误
- 基类 T 无效错误
- 从“常量字符*”到“字符*”的转换无效错误