在以下代码中:
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/