微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

在以下代码中:

Symbol,Rate,volume

class Outer { private: void f_private(Outer::Inner in); // Wrong public: class Inner {}; void f_public(Outer::Inner in); // OK }; 不能使用嵌套类 f_private() 作为参数类型。但是在 Outer::Inner 中这样做是可以的。

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。