C++ 类型‘;串行:串行’;命名构造函数,而不是C/C++;

C++ 类型‘;串行:串行’;命名构造函数,而不是C/C++;,c++,c++11,constructor,syntax-error,C++,C++11,Constructor,Syntax Error,在Ubuntu上使用Eclipse Im试图定义函数: serial::serial new_serial(){ serial handle = new serial; handle.setName("ttyUSB0"); return handle; } 正在使编译器出错并导致它显示错误 Type ‘serial::serial’ names the constructor, not the type 如何解决这个问题?是什么导致它出错?正如消息所说:您有一个名

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

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\u ptr
。但不清楚您是要返回对象还是指针,因为行

serial handle = new serial;

这也是错误的。
new
返回一个指针,您不能将指针指定给用于保存对象的变量。(你可能会想到java或C++,大多数变量都是引用。C++是不同的。)< /p> < p>你在命名空间<代码>序列< /COD>中有一个类<代码>序列<代码>吗? 如果是这样,你就是自找麻烦。由于ADL可能已启用名称空间进行名称查找,因此名称查找规则通常会在这方面出现问题。在这种情况下,
serial::serial
可能意味着命名空间
serial
中的类
serial
。或者,它可以是class
serial
的构造函数

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


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

serial是一个类吗?您是否试图定义一个静态的
serial
方法,它在堆上构造一个实例?我试图做的是从函数传回一个serial对象,与构造函数的方式类似。我尝试使用工厂方法或函数,并返回配置为硬编码默认值的串行对象。@BobR:既然您用C++11标记了它,我想您可以使用C++11功能。在这种情况下,您可能需要查看Sutter最新的factory函数。