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

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

17.03.2018, 00:29. Показов 1186. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru