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

时间:2014-06-25 06:25:35

标签: c++ c++11 constructor syntax-error

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

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

    return handle;
}

正在使编译器跳闸并导致它显示错误。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

new

也是错误的。 {{1}}返回一个指针,你不能指定一个指向一个容器的指针。 (你可能会想到Java或C#,其中大多数变量都是引用.C ++是不同的。)

答案 1 :(得分:3)

您是否在命名空间serial中有一个班级serial

如果是这样,你就是在寻找麻烦。名称查找规则通常会对此进行操作,因为ADL可能已启用名称空间以进行名称查找。在这种情况下,serial::serial可能意味着名称空间serial中的类serial。或者,它可以是类serial的构造函数。

典型的解决方案是将命名空间命名为复数:serials::serial

另一方面,你在工厂函数中使用serial不合格,所以Wyzard很可能已经解决了你的问题......