这段最小可复制的代码
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::MyClassAlias()代替MyClassAlias::MyClass()时,它才会被治愈。同时,正如您所看到的,让MyClassAlias::~MyClassAlias() (编译器没有错误)是可以的。
有什么方法可以解决这个问题:命名的一致性吗?
发布于 2022-07-13 15:27:58
构造函数和析构函数的“名称”(虽然它们不是标准意义上的名称)分别是MyClass和~MyClass。它们基于注入的类名。您需要使用这两种方法来定义它们或为它们编写任何声明。您不能对这些名称使用别名。
同样的情况不适用于::之前的类名。它可以是别名的名字。
GCC似乎也接受了这个化名作为析构函数的定义,但据我所知,这是不符合标准的。
https://stackoverflow.com/questions/72968744
复制相似问题