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



在以下代码中:

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()中这样做是可以的。

有人能向我解释一下这是基于什么规则,有什么好处吗?

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

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){}    //

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

相关内容

  • 没有找到相关文章

最新更新