доступ к вложенной структуре внутреннего класса из внешнего класса - PullRequest
2 голосов
/ 30 ноября 2011
class A
{
 class B;
 B::data myData; //Error: incomplete type not allowed.

    class B
    {
    public:
        struct data
        {
        int number;
        };
    };
};

В приведенном выше коде, как я могу объявить переменную-член типа данных в классе A?

Ответы [ 3 ]

3 голосов
/ 30 ноября 2011

B должно быть определено , прежде чем использовать его в объявлении A::myData:

class A
{
    class B
    {
    public:
        struct data
        {
            int number;
        };
    };

     B::data myData;
};
3 голосов
/ 30 ноября 2011

Я думаю, что все, что вам нужно сделать, это поместить определение класса перед объявлением переменной.Компилятор не знает, что находится внутри class B, только что он существует, пока не встретит фактическое определение класса

0 голосов
/ 30 ноября 2011

Используйте спецификаторы области и убедитесь, что вы не используете тип до тех пор, пока он не определен в файле:

class A
{   
    class B
    {
    public:
        struct data
        {
        int number;
        };
    };

    B::data myData;
};

Также обратите внимание, что предварительное объявление не работает, если вы просто не используете указатель на класс. Когда вы создаете экземпляр класса, как у вас, ему нужно определение для этого класса, доступного для него немедленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...