不能使用公共嵌套类作为私有方法参数

Posted

技术标签:

【中文标题】不能使用公共嵌套类作为私有方法参数【英文标题】: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()这样做是可以的。

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

【问题讨论】:

【参考方案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)    //

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

【讨论】:

以上是关于不能使用公共嵌套类作为私有方法参数的主要内容,如果未能解决你的问题,请参考以下文章

私有的嵌套类(内部或静态)是不是可能具有具有公共访问权限的方法?

我应该在私有/内部方法中抛出空参数吗?

使用 WSDL,我们能否在作为 Web 服务方法参数的类中生成其他公共方法?

Java基础学习笔记十二 类抽象类接口作为方法参数和返回值以及常用API

私有类作为公共方法的返回类型

spring 笔记1: mvn 中Controller方法的参数不能是嵌套类(内部类)。