首页 >后端开发 >C++ >C 中的嵌套类可以向前声明以在其封闭类之外使用吗?

C 中的嵌套类可以向前声明以在其封闭类之外使用吗?

Barbara Streisand
Barbara Streisand原创
2024-12-01 15:57:10630浏览

Can Nested Classes in C   Be Forward Declared for Use Outside Their Enclosing Class?

嵌套类前向声明​​:一项不可能完成的任务

在 C 中,内部类是组织代码的便捷方式。但是,当尝试在封闭类定义之外通过引用传递内部类对象时,可能会出现编译错误。这是因为编译器要求在调用函数中使用内部类之前先完全定义或声明内部类。

考虑以下代码:

class Container {
public:
    class Iterator {
        ...
    };

    ...
};

如果您希望传递迭代器在 Container 类范围之外的函数中通过引用引用对象,您可以直观地尝试转发声明 Iterator 类:

class Container::Iterator;

class Foo {
    void Read(Container::Iterator& it);
};

但是,由于未知类型迭代器,此方法失败并出现编译错误。

前向声明限制

在 C 中,前向声明只能用于声明类本身,而不是它们的嵌套成员。此限制会阻止内部类的前向声明。

解决方案

要解决此问题,请考虑替代策略:

  • 使类非嵌套: 将 Iterator 类移到 Container 类之外,以便可以前向声明
  • 重新排序类声明: 在 Foo 类的函数签名中使用 Iterator 类之前完整定义它。
  • 使用公共基类: 创建一个单独的基类,Iterator 类和 Foo 类中的函数都可以继承该基类。这允许您转发声明公共基类并通过引用传递从其派生的对象。

以上是C 中的嵌套类可以向前声明以在其封闭类之外使用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn