【问题标题】:C++11 using delaration for constructorC++11 使用构造函数声明
【发布时间】:2020-09-15 13:00:46
【问题描述】:

我尝试使用 C++11 的 using-declaration 来编写如下构造函数

    class BaseDevice : public DeviceInterface
    {
    public:
        /**
         * @brief Constructor
         */
        BaseDevice();   
         ~BaseDevice(); 
      
    };

class LED : public BaseDevice
    {
    public:
        /**
         * @brief Constructor
         */
        using BaseDevice::BaseDevice;
        ~LED();    
    };

但我从 Arm 编译器中得到错误“使用声明可能不会命名构造函数或析构函数”。这是否意味着arm编译器不能在C++11中使用派生构造函数?

【问题讨论】:

  • 您的意思是A 继承自Base?您对 using 声明的意图是什么?
  • 是的,A 是从 Base 派生的,这是我的打字错误。
  • 不要在问题中即时输入示例。离线准备它们,检查它们是否准确地重现了错误,然后将它们复制并粘贴到这里。请编辑您的帖子以包含正确的minimal reproducible example
  • 错误信息是我从控制台复制的内容
  • 请发布真实代码。在您发布的那个中没有派生构造函数

标签: c++ c++11 compiler-errors arm


【解决方案1】:

最后发现ARM Compiler不支持继承构造函数。

【讨论】:

    【解决方案2】:

    您无需声明派生类使用基类的默认构造函数。这是默认情况下发生的情况,除非您另外编写代码。

    【讨论】:

    • 是的,你是对的,但我想知道为什么会发生这个错误。
    • 发生这种情况是因为您使用了无效的构造。在 C++ 中禁止这样做。
    • 好吧,编译器另有说法。
    • 编译器所说的与决定 C++ 是否有效的因素之间存在巨大差异。
    • 嗯,这并没有改变编译器总是正确的事实,因为你没有其他编译的可能性。
    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多