Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384

Ошибка при реализации функции

17.03.2018, 00:29. Показов 1226. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, есть шаблонный класс, который реализует двусвязный кольцевой список.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
template <class NODETYPE>
class List
{
public:
    List(); 
    List(const List<NODETYPE>&);
    ~List();
 
    void pushFront(const NODETYPE&);
    void pushBack(const NODETYPE&);
    void pushInSortList(const NODETYPE&);
 
    void setCurrentNodeOnTheBegin();
    void setCurrentNodeOnTheEnd();
 
    bool deleteElement(NODETYPE);
    void deleteAllElements();
 
    bool findValue(const NODETYPE&);
 
    bool isEmpty() const;
    void print() const;
 
    void sort();
 
    bool operator!() const;
    const List<NODETYPE>& operator=(const List<NODETYPE>&);
    List<NODETYPE>& operator++();
    List<NODETYPE>& operator--();
 
    const NODETYPE& getReferencesCurrentData() const;
    NODETYPE getValueCurrentData() const;
 
private:
    template <typename NODETYPE>
    struct ListNode
    {
        NODETYPE data; 
        ListNode<NODETYPE>* nextPtr = 0;
        ListNode<NODETYPE>* prevPtr = 0;
    };
                        
    ListNode<NODETYPE>* firstPtr;
    ListNode<NODETYPE>* currentNodePtr;
 
private:
    void copyList(ListNode<NODETYPE>*);
    void deleteRemaindList(ListNode<NODETYPE>*);
    ListNode<NODETYPE>* getNewNode(const NODETYPE&);
};
Функция getNewNode возвращает указатель на новый созданый узел.
Однако, когда дело доходит до реализации, которая выглядит следующим образом:
C++
1
2
3
4
5
6
7
8
template <typename NODETYPE>
List<NODETYPE>::ListNode<NODETYPE>* List<NODETYPE>::getNewNode(const NODETYPE& value)
{
    ListNode<NODETYPE> *newPtr = new ListNode<NODETYPE>;
    newPtr->data = value;
 
    return newPtr;
}
Я получаю ряд ошибок:
Code
1
2
3
Error   C2061   syntax error: identifier 'ListNode<`template-type-parameter-1'>'
Error   C2143   syntax error: missing ';' before '{
Error   C2447   '{': missing function header (old-style formal list?)
Код в main выглядит следующим образом:
C++
1
2
3
4
5
6
List<int> list1;
 
for (int i = 0; i < 5; ++i)
    list1.pushBack(i);
 
list1.print();
Не могу понять, почему так происходит, где я что-то упустил?
Буду очень признательный за помощь.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2018, 00:29
Ответы с готовыми решениями:

Ошибка в реализации хеш-функции SHA1
Здравствуйте, Решил написать простую реализацию, но результат вычислений оставляет желать лучшего Подскажите, пожалуйста, какой нюанс я...

В одной из функции реализации опз ошибка
double result(char* str) { int i; char ss, ss1, ss2, ssR = 'z' + 1; double op1, op2, res, arr; cout &lt;&lt; &quot;Input data&quot; &lt;&lt; endl; ...

Ошибка при реализации калькулятора
Собственно, пишу первую программу (банальный калькулятор), принцип его работы такой: Пользователь выбирает нужное ему действие с числами,...

7
7 / 7 / 14
Регистрация: 18.10.2016
Сообщений: 46
17.03.2018, 01:30
Цитата Сообщение от igdev Посмотреть сообщение
Не могу понять, почему так происходит, где я что-то упустил?
С синтаксисом внимательнее(надеюсь я сам ничего не упустил):
C++
1
2
3
4
5
6
7
8
template <typename NODETYPE>
ListNode<NODETYPE>* List<NODETYPE>::getNewNode(const NODETYPE& value)
{
    ListNode<NODETYPE> *newPtr = new ListNode<NODETYPE>;
    newPtr->data = value;
 
    return newPtr;
}
0
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
17.03.2018, 01:38  [ТС]
art_h4rd, Пробовал. Так тоже не работает. + студия при такой записи выкидывает еще больше ошибок.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
17.03.2018, 01:51
Лучший ответ Сообщение было отмечено igdev как решение

Решение

C++
1
2
3
4
5
6
7
8
template <typename NODETYPE>
typename List<NODETYPE>::ListNode<NODETYPE>* List<NODETYPE>::getNewNode(const NODETYPE& value)
{
    ListNode<NODETYPE> *newPtr = new ListNode<NODETYPE>;
    newPtr->data = value;
 
    return newPtr;
}
1
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
17.03.2018, 02:00  [ТС]
nd2, Благодарю! Работает!
Но в чем хитрость и в каких случаях необходимо писать этот typename?
Можно ссылочку или указание, где можно об этом почитать?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
17.03.2018, 02:06
Цитата Сообщение от igdev Посмотреть сообщение
Но в чем хитрость
Читать, что просит компилятор.
Цитата Сообщение от igdev Посмотреть сообщение
в каких случаях необходимо писать этот typename?
Когда компилятор просит.

Добавлено через 2 минуты
Цитата Сообщение от igdev Посмотреть сообщение
Можно ссылочку или указание, где можно об этом почитать?
Знатоки шаблонов, к коим я не отношусь, пусть подскажут.
0
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
17.03.2018, 02:15  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Знатоки шаблонов, к коим я не отношусь, пусть подскажут.
Ок. Значит, мне надо открывать книгу Александреску.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
17.03.2018, 02:29
Литература C++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.03.2018, 02:29
Помогаю со студенческими работами здесь

Ошибка при реализации стека
Здравствуйте, помогите пожалуйста разобраться в ошибке.Пишу класс, в нём есть динамический символьный массив, вызываю функцию void без...

Ошибка исполнения при реализации стека
#include &lt;iostream&gt; using namespace std; struct item {int a; item*p; }; int main() { item*h,*n; int b;

Ошибка при реализации перегрузки оператора <<
Добрый день. Прошу помощи. Имеется такой класc. class DList { ... public: ... void Save(std::ofstream &amp;b_out); //...

Программа реализации функции х % от у - остаток от деления (при этом х % 0 = 0)
помогите написать стандартную программу для мпд, которая реализует функцию х % от у - остаток от деления (при этом х % 0 = 0). помогите...

Ошибка при использовании итератора в реализации класса
На скрине всё понятно чо каво. Собственно, что я упустил? Что не дочитал? Проясните, пожалуйста. Из-за медленного интернета не могу...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru