c++ - 不能使用公共(public)嵌套类作为私有(private)方法参数

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

在以下代码中:

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() 中这样做是可以的.
有人可以向我解释这是基于什么规则,它有什么好处?

最佳答案

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

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){}    //
如果您将类用作指针或引用参数,则无需在此之前定义它,前向声明就足够了。

关于c++ - 不能使用公共(public)嵌套类作为私有(private)方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67136315/

相关文章:

php - 错误 : php. h 没有这样的文件或目录

c++ - 丢弃视频帧

java - 来自另一个 JFrame 的 JTable 值

java - 为什么要对通用 DAO 接口(interface)中的方法使用默认访问权限?

c++ - 这是绑定(bind)到要突变的非 RVO 返回值的惯用方法吗?

c++ - 结构数组的模糊引用

java - 你如何实例化一个内部类并实现一个额外的接口(interface)

c++ - 嵌套模板类特化的语法

java - 如何定义继承内部类的子类的构造函数?

c# - 为什么 resharper 不建议删除多余的访问修饰符?