这段最小可复制代码
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也接受析构函数定义的别名,但据我所知,这是不符合标准的。