2016-02-27 2 views
1

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

#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; 
} 

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

+0

Что такое 'node'? – aschepler

+0

Извините, набрав ошибку. исправить его – XZ6H

ответ

5

n - это вложенный класс. Вы должны получить его с помощью abc::n.

Примечание: Название и сфера применения класса также namespace, поскольку n вложен в abc, abc теперь какnamespace из 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; 
} 
+0

Вы переусердствовали. После внутри abc :: scope вам не нужно снова и снова квалифицировать n. –

+0

Да, там есть избыточность, но я пытался продемонстрировать предмет пространства имен .... – WhiZTiM

1

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

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

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

Смежные вопросы