在Ubuntu上使用Eclipse我试图定义函数:
serial::serial new_serial(){
serial handle = new serial;
handle.setName("ttyUSB0");
return handle;
}
正在使编译器跳闸并导致它显示错误。
Type ‘serial::serial’ names the constructor, not the type
如何解决这个问题?什么导致它出错?
答案 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很可能已经解决了你的问题......