【问题标题】:Can't use public nested class as private method parameter不能使用公共嵌套类作为私有方法参数
【发布时间】:2021-07-12 03:13:34
【问题描述】:

在以下代码中:

class Outer {
   private:
    void f_private(Outer::Inner in); // Wrong

   public:
    class Inner {};
    void f_public(Outer::Inner in); // OK
};

f_private() 不能使用嵌套类Outer::Inner 作为参数类型。但是在f_public()这样做是可以的。

有人可以向我解释这是基于什么规则,它有什么好处?

【问题讨论】:

    标签: c++ inner-classes access-modifiers public-members


    【解决方案1】:

    问题不在于它是公开的还是私有的,而是顺序。这可能看起来很奇怪,对于其他类成员来说这不是问题,但考虑到在这种情况下您正在声明一个新的用户定义类型,因为您必须在使用它之前声明它:

    class Outer 
    {
    public:
        class Inner {};   
        void f_public(Outer::Inner in);  // OK
    
    private:
        void f_private(Outer::Inner in); // OK
    };
    

    或者:

    class Outer
    {
    public:
        class Inner;                          // declare
        void f_public(Outer::Inner in);       // OK
    
    private:
        void f_private(Outer::Inner in);       // OK
    };
    
    class Outer::Inner {};                     // define
    
    void Outer::f_private(Outer::Inner in){}   // method definition after class definition
    
    void Outer::f_public(Outer::Inner in){}    //
    

    如果你使用类作为指针或引用参数,那么之前不需要定义它,前向声明就足够了。

    【讨论】:

      猜你喜欢
      • 2014-06-18
      • 1970-01-01
      • 2011-10-16
      • 2014-01-03
      • 2011-04-18
      • 2016-04-30
      • 2017-11-29
      • 1970-01-01
      • 2011-12-08
      相关资源
      最近更新 更多