2014-09-25 120 views
1

说我有这样的事情通过外部类的实例访问一个嵌套的内部类

class Outer 
{ 
public: 
    static int m_Out; 
    class Inner 
    { 
    public: 
     static int m_In; 
     void Display(); 
    }; 

}; 

int Outer::m_Out = 10; 
int Outer::Inner::m_In = 25; 

void Outer::Inner::Display() 
{ 
    std::cout <<m_Out << std::endl; 
} 

int main() 
{ 
    Outer objOut; 
    Outer::Inner objIn; 
    objouOut.Inner::m_in //Error 
    std::cin.get(); 
} 

这是为什么不可能?这是否意味着我无法通过Outer类的实例访问类内部?我知道我可以用外::内蒙古:: m_in抓住它,但我想知道我的局限性,当它通过外部类

+0

@这完全有道理。 – MistyD 2014-09-25 21:03:38

回答

0

由于该成员变量m_In声明static它属于class Inner,而不是到class Inner的任何实例的事实。

因此,以下代码的部分是无效的C++语法:

objOut.Inner::m_In; 

为了访问它要键入:

Outer::Inner::m_In 

此外,限定了内部类不意味着外部类的每个对象都会有一个内部类的成员对象。内部类的定义相当于外部类定义范围内用户类型的定义。

+0

请放下评论,内部类是一种类型,所以我可以将其标记为答案。这是最初发布的评论,但被删除。此声明为我清除了所有内容,并希望能够帮助其他人。谢谢您的详细解答 – MistyD 2014-09-25 21:11:01

0

的实例来嵌套类访问这应该这样做

class Outer{ 
public: 
    static int m_Out; 
    class Inner 
    { 
    public: 
     static int m_In; 
     void Display(); 
    }; 

}; 

int Outer::m_Out = 10; 
int Outer::Inner::m_In = 25; 

void Outer::Inner::Display() 
{ 
    std::cout << m_Out << std::endl; 
} 

int main(){ 
    Outer::Inner objIn; 
    Outer::Inner::m_In; 
     std::cin.get(); 
} 

你没有做Outer objOut;

+0

我知道如何访问它。我想知道为什么。请在答案中写下内部类是类型的评论。清除所有内容 – MistyD 2014-09-25 21:04:20

+0

抱歉,迟到的评论大声笑在YouTube上观看视频。 @ 40two几乎总结了你。 – 2014-09-25 21:08:50

相关问题