Я пытаюсь определить функцию, которая возвращает указатель на структуру

#include <iostream> 
using namespace std;
class abc
{
private:
    struct n
    {
        int data;
    };
public:
    n* print();
};

n* abc::print()
{
    n* q = new n;
    q->data = 7;
    return q;
}

Когда эта программа компилируется, отображается ошибка "идентификатор n не определен". Почему программа успешно компилируется, если внутри класса определена та же функция abc?

1
XZ6H 27 Фев 2016 в 22:32

3 ответа

Лучший ответ

n - это вложенный класс. Вам необходимо квалифицировать его с помощью abc::n.

Примечание. Имя и область действия класса также являются {{X0 }} , поскольку n вложен в abc, abc теперь как {{X4} } из n.

Полный пример:

#include <iostream> 
using namespace std;
class abc
{
private:
    struct n
    {
        int data;
    };
public:
    n* print();
};

abc::n* abc::print()
{
    abc::n* q = new abc::n;
    q->data = 7;
    return q;
}
5
WhiZTiM 27 Фев 2016 в 19:41

Поскольку возвращаемый n, когда он определен вне класса, имеет другую область видимости. Вы можете исправить это, указав перед ним правильную область видимости:

abc::n* abc::print()
{
    n* q = new node;
    q->data = 7;
    return q;
}
1
H. Guijt 27 Фев 2016 в 19:34

Вне класса нет символа n, поэтому вам нужно полностью квалифицировать его, как abc::n.

1
Some programmer dude 27 Фев 2016 в 19:34