C ++, внутренние классы и почему вы можете создавать элементы только как указатели на них - PullRequest
1 голос
/ 24 апреля 2011

Почему вы можете создать пионер только для внутреннего класса в качестве члена включающего класса.Как это устроено в памяти и почему это предотвращает, например:

class temp  
{  
    public:

    class inner
    {
    public:
        inner(int a = 0) : memberInt(a) {}
        const int memberInt;
    };

    temp(int i = 0) : member(i)  
    {  
    }  
    inner *i; // this works  
    inner i; // this doesn't  
    int member;  
};  

Заранее спасибо: -).

1 Ответ

2 голосов
/ 24 апреля 2011

Приведенный выше код на самом деле прекрасно компилируется для меня в g ++, если я переименую второй (внутренний i) во внутренний i2.

Это именно тот код, который я скомпилировал в g ++:

class temp  
{  
    public:

    class inner
    {
    public:
        inner(int a = 0) : memberInt(a) {}
        const int memberInt;
    };

    temp(int i = 0) : member(i)  
    {  
    }  

    inner *i;
    inner i2;
    int member;  
}; 


int main()
{
    return 0;
}
...