首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在构造函数定义中使用类别名

在构造函数定义中使用类别名
EN

Stack Overflow用户
提问于 2022-07-13 15:20:27
回答 1查看 75关注 0票数 2

这段最小可复制的代码

代码语言:javascript
复制
class MyClass
{
public: 
    explicit MyClass();

    ~MyClass();
};  

using MyClassAlias = MyClass;

MyClassAlias::MyClassAlias()
{

}

MyClassAlias::~MyClassAlias()
{

}

int main()
{
    MyClassAlias obj;

    return 0;
}   

给出错误:

代码语言:javascript
复制
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() (编译器没有错误)是可以的。

有什么方法可以解决这个问题:命名的一致性吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-13 15:27:58

构造函数和析构函数的“名称”(虽然它们不是标准意义上的名称)分别是MyClass~MyClass。它们基于注入的类名。您需要使用这两种方法来定义它们或为它们编写任何声明。您不能对这些名称使用别名。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72968744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档