为其构造函数定义使用类别名



这段最小可复制代码

class MyClass
{
public: 
explicit MyClass();
~MyClass();
};  
using MyClassAlias = MyClass;
MyClassAlias::MyClassAlias()
{
}
MyClassAlias::~MyClassAlias()
{
}
int main()
{
MyClassAlias obj;
return 0;
}   

给出错误:

a.cpp:11:1: error: ISO C++ forbids declaration of ‘MyClassAlias’ with no type [-fpermissive]
11 | MyClassAlias::MyClassAlias()
| ^~~~~~~~~~~~
a.cpp:11:1: error: no declaration matches ‘int MyClass::MyClassAlias()’
a.cpp:11:1: note: no functions named ‘int MyClass::MyClassAlias()’
a.cpp:1:7: note: ‘class MyClass’ defined here
1 | class MyClass
|       ^~~~~~~

只有当我用MyClassAlias::MyClass()代替MyClassAlias::MyClassAlias()时,它才会被治愈。同时,正如你所看到的,有MyClassAlias::~MyClassAlias()是可以的(编译器没有给出错误)。

是否有办法解决这个问题:在命名上保持一致?

"names"构造函数和析构函数(尽管它们不是标准技术意义上的名称)分别是MyClass~MyClass。它们基于注入的类名。您需要使用这两个来定义它们或为它们编写任何声明。不能使用别名。

同样不适用于::之前的类名。可以是别名。

似乎GCC也接受析构函数定义的别名,但据我所知,这是不符合标准的。

相关内容

  • 没有找到相关文章

最新更新