不能使用 public 嵌套 class 作为私有方法参数
Can't use public nested class as private method parameter
在下面的代码中:
class Outer {
private:
void f_private(Outer::Inner in); // Wrong
public:
class Inner {};
void f_public(Outer::Inner in); // OK
};
f_private()
不能使用嵌套的 class Outer::Inner
作为参数类型。但是在 f_public()
.
中这样做是可以的
谁能给我解释一下这是基于什么规则,它有什么好处?
问题不在于它是 public 还是私有,而是顺序。这可能看起来很奇怪,对于其他 class 成员来说这不是问题,但考虑到在这种情况下您正在声明一个新的用户定义类型,因此您必须在使用它之前声明它:
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){} //
如果你使用class作为指针或引用参数那么之前就不需要定义它了,前向声明就足够了。
在下面的代码中:
class Outer {
private:
void f_private(Outer::Inner in); // Wrong
public:
class Inner {};
void f_public(Outer::Inner in); // OK
};
f_private()
不能使用嵌套的 class Outer::Inner
作为参数类型。但是在 f_public()
.
谁能给我解释一下这是基于什么规则,它有什么好处?
问题不在于它是 public 还是私有,而是顺序。这可能看起来很奇怪,对于其他 class 成员来说这不是问题,但考虑到在这种情况下您正在声明一个新的用户定义类型,因此您必须在使用它之前声明它:
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){} //
如果你使用class作为指针或引用参数那么之前就不需要定义它了,前向声明就足够了。