类型' serial::serial '命名构造函数,而不是C/ c++中的类型

Type ‘serial::serial’ names the constructor, not the type in C/C++

本文关键字:serial 类型 c++ 构造函数      更新时间:2023-10-16

在Ubuntu上使用Eclipse我试图定义这个函数:

serial::serial new_serial(){
    serial handle = new serial;
    handle.setName("ttyUSB0");
    return handle;
}

正在触发编译器并导致它显示错误。

Type ‘serial::serial’ names the constructor, not the type 

如何解决这个问题?是什么导致它出错?

正如消息所说:您有一个名为serial的类,它包含一个也名为serial的构造函数,因此serial::serial意味着serial类中的serial函数。不能将其用作函数的返回类型,因为返回类型必须是类型,例如类。

您可能希望函数的返回类型是serial(按值返回类的实例)或类似指针的东西,例如serial*或(最好)std::unique_ptr<serial>。但不清楚是要返回对象还是指针,因为

这一行
serial handle = new serial;

也是错误的。new返回一个指针,你不能将指针赋值给一个用来保存对象的变量。(您可能会想到Java或c#,其中大多数变量都是引用。c++不同)

您是否在命名空间serial中有一个类serial ?

如果是这样,你是自找麻烦。名称查找规则通常在这一点上出错,因为ADL可能已经启用了名称空间进行名称查找。在这种情况下,serial::serial可能意味着名称空间serial中的类serial。或者,它可以是类serial的构造函数。

一个典型的解决方案是以复数形式命名命名空间:serials::serial

另一方面,您在工厂函数中使用serial不合格,因此很可能Wyzard已经解决了您的问题…