Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
#1

Вложенная структура в класс - C++

09.06.2010, 12:48. Просмотров 2521. Ответов 14
Метки нет (Все метки)

Привет всем, пишу шаблонный класс - кольцевой двунаправленный список, вообщем объявил структуру Node в классе:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class T> class List_Ring{
private:
    struct Node {
        T key;
        Node* prev;
        Node* next;
    };
    Node* pbeg;
    Node* pend;
public:
    List_Ring(T _key = 5);
    ~List_Ring();
    void Add_el(T _key);
    void Show();
    Node* find(T& _key);
};
теперь хочу написать реализацию метода Node* find(T& _key);

C++
1
2
3
4
5
6
7
8
9
10
11
template<class T>
Node* List_Ring<T>::find(T& _key){
    if(!pbeg) return 0;
    Node* pv = pbeg;
    bool found = false;
    do{
        if(pv->key == _key) found = true;
        else pv = pv->next;
    }while(pv != pend && found)
    
}
программа не компилиться, из ошибок мне ничего не понятно((
Main.cpp
: error C2143: syntax error : missing ';' before '*'
: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
: error C2065: 'T' : undeclared identifier
: error C2065: '_key' : undeclared identifier
: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
: error C2072: 'List_Ring<T>::find' : initialization of a function
: fatal error C1903: unable to recover from previous error(s); stopping compilation

TEmplate_Prob - 7 error(s), 0 warning(s)
помогите разобраться, заранее благодарен

Добавлено через 11 минут
забыл еще поставить ";" после оператора while и return pv, но это сути дела не меняет.

Добавлено через 8 часов 54 минуты
тема еще актуальна
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2010, 12:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вложенная структура в класс (C++):

структура и класс - C++
здравствуйте, мне нужно рганизовать структуру Point с float полями x,y, организовать класс Triangle с Point полями a,b,c и функцией...

Структура и класс - C++
Доброго времени суток! Имеется задача: создать класс для работы с КАРТОТЕКОЙ КНИГ. Класс хранит информацию: название, имя автора, издание...

Класс, структура - C++
есть классы class A { public: char ch; int a, b; double c; };

Структура или класс - C++
Подскажите, пожалуйста, своими словами, что такое структура и что такое класс. В чем отличие и как их использовать? У меня есть...

Получается структура в С++ - это класс? - C++
Элементами или полями структуры могут быть переменные, массивы, ранее определенные структуры. Функции не могут быть полями структуры (В...

оператора индексации+класс+структура - C++
Задача такая нужна создать словарь терминов. 1.Создаю свой тип данных помощью struct term (слово термин) definition (определение к...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
09.06.2010, 13:04 #2
На сколько я понимаю структура Node скрыта внутри класса, и потому снаружи она не видна.
Сделай ее объявление вне класса - должно помочь.
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
09.06.2010, 13:13  [ТС] #3
Это понятно, а как мне в таком виде к ней обратиться, просто не объект должен быть самодостаточным, а не так чтоб часть методов и элементов где то снаружи была
0
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
09.06.2010, 13:31 #4
Цитата Сообщение от _Eldar_ Посмотреть сообщение
Это понятно, а как мне в таком виде к ней обратиться,
В каком именно виде?

Цитата Сообщение от _Eldar_ Посмотреть сообщение
просто не объект должен быть самодостаточным, а не так чтоб часть методов и элементов где то снаружи была
Многовато "не" так, что НЕ понятен вопрос
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
09.06.2010, 13:35  [ТС] #5
FireNovel, Как мне объявить шаблонный метод, который будет возвращать указатель на структуру находящуюся внутри шаблонного класса. По поводу "не" :
... просто объект...
0
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
09.06.2010, 14:02 #6
Цитата Сообщение от _Eldar_ Посмотреть сообщение
Как мне объявить шаблонный метод, который будет возвращать указатель на структуру находящуюся внутри шаблонного класса
Надо репу чесать, на работе хорошо не думается.
Проблема в том, куда этот метод будет возвращать этот указатель.
Т.е. при его(метод) вызове вызывающий объект будет находится не в той области видимости, где определен Node.
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
10.06.2010, 00:51  [ТС] #7
это вообще возможно? ответьте хоть кто-нибудь пжлст?
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.06.2010, 00:59 #8
В строке 3 вместо
C++
1
Node* List_Ring<T>::find(T& _key){
надо написать
C++
1
List_Ring<T>::Node* List_Ring<T>::find(T& _key){
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
10.06.2010, 01:03  [ТС] #9
Mr.X, так я попробовал еще вчера, ошибок становилось меньше, но не компилилось:
: warning C4346: 'List_Ring<T>::Node' : dependent name is not a type
prefix with 'typename' to indicate a type
: error C2143: syntax error : missing ';' before '*'
: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
: fatal error C1903: unable to recover from previous error(s); stopping compilation
TEmplate_Prob - 3 error(s), 1 warning(s)
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.06.2010, 01:20 #10
В строке 3 надо добавить typename:
C++
1
typename List_Ring<T>::Node* List_Ring<T>::find(T& _key){
1
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
10.06.2010, 01:23  [ТС] #11
УРА)), странно почему он(компилятор) так не понимал (без typename)
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.06.2010, 01:42 #12
Согласно стандарту квалифицированное зависимое имя воспринимается компилятором как тип только если перед ним стоит typename.
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
10.06.2010, 01:52  [ТС] #13
Mr.X, а что попадает под понятие "квалифицированное зависимое имя" ?
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.06.2010, 02:05 #14
Квалифицированное имя - это такое, в котором явно указана область видимости, к которой оно принадлежит, а зависимое - если оно каким-либо образом зависит от параметра шаблона.
1
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
10.06.2010, 02:06  [ТС] #15
Mr.X, буду знать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2010, 02:06
Привет! Вот еще темы с ответами:

Структура и класс string. Проблема с выводом строки. - C++
Такая проблема: объявляю структуру с классом string: struct exam { std::string name; ... }; Затем объявляю...

Требуется класс, делегат, перечисление, интерфейс или структура - C++
помогите понять в чем тут всё таки ошибка, все попытки исправить самостоятельно были безрезультатны... using System; using...

Структура «Школьник»: фамилия, имя, отчество; класс; номер телефона; оценки по предметам - C++
Структура «Школьник»: фамилия, имя, отчество; класс; номер телефона; оценки по предметам (математика, физика, русский язык,...

Структура/класс "Студент". Применение конструкторов - C++
Не используя функции стандартной библиотеки Си для работы со строками, кроме указанных написать собственную функцию ,реализующую алгоритм....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.06.2010, 02:06
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru