Название: Пример из Павловской. Шаблон класса. Отправлено: Pupil от Сентябрь 24, 2014, 12:05 Здравствуйте!
Набранный пример из книги 1 в 1 не заработал. Подправил всё, что смог. Осталось 2-е ошибки: 1. main.cpp:73: ошибка: expected constructor, destructor, or type conversion before '*' token 2. main.cpp:85: ошибка: expected constructor, destructor, or type conversion before '*' token Прошу кратко описать логику исправления и не пороть строго ученика. Спасибо! Код: #include <QtCore/QCoreApplication> Название: Re: Пример из Павловской. Шаблон класса. Отправлено: m_ax от Сентябрь 24, 2014, 12:24 Код нужно исправить на Код
И аналогично с методом insert.. Название: Re: Пример из Павловской. Шаблон класса. Отправлено: OKTA от Сентябрь 24, 2014, 12:29 m_ax, объясни пожалуйста, в чем тут засада? Из-за приватности Node и того, что компилятор не понимает, что Node это какой-то тип?
Название: Re: Пример из Павловской. Шаблон класса. Отправлено: m_ax от Сентябрь 24, 2014, 12:36 m_ax, объясни пожалуйста, в чем тут засада? Из-за приватности Node и того, что компилятор не понимает, что Node это какой-то тип? Из-за того, что компилятор не понимает что возвращаемый тип Node - это именно тот самый ноде)А typename нужен для того, чтобы явно сказать компилятору, что Node это тип (поскольку List шаблонный класс).. Название: Re: Пример из Павловской. Шаблон класса. Отправлено: OKTA от Сентябрь 24, 2014, 12:41 Спасибо! 8)
Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Pupil от Сентябрь 24, 2014, 12:46 m_ax, Спасибо!!! Я понял, что компилятор не понимает возвращаемый тип ввиду того, что в редакторе кода шрифт Node серого цвета, а не активного.
Спасибо! Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Pupil от Сентябрь 24, 2014, 14:20 У меня снова текут слёзы. Классы скомпилировались, а вызвать функции из main не получается. Ругается...
После объявления класса написал: Код: typedef List<class Data> lst; В функции main: Код: lst lst1; компилятор выдает ошибку: main.cpp:124: ошибка: 'lst1' is not a class or namespace Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Old от Сентябрь 24, 2014, 14:22 У меня снова текут слёзы. Пока вы не изучите c++ они будут течь постоянно. ;)Код: lst lst1; Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Pupil от Сентябрь 24, 2014, 14:31 Спасибо, Учитель. Но через доступ не :: , . компилятор также выдает ошибку:
main.cpp:124: ошибка: no matching function for call to 'List<Data>::add(int&)' Название: Re: Пример из Павловской. Шаблон класса. Отправлено: OKTA от Сентябрь 24, 2014, 14:34 А разве вообще разрешено вот так просто тэмплэйт впихивать в typedef?
Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Old от Сентябрь 24, 2014, 14:35 Спасибо, Учитель. Но через доступ не :: , . компилятор также выдает ошибку: Ну так это совсем другая ошибка. :)main.cpp:124: ошибка: no matching function for call to 'List<Data>::add(int&)' Если вы хотите хранить в вашем списке инты, то и указывать это нужно явно: Код
Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Igors от Сентябрь 24, 2014, 14:36 А typename нужен для того, чтобы явно сказать компилятору, что Node это тип (поскольку List шаблонный класс).. А в "самом строгом" компиляторе (по Верес'у) можно без typename. Правда потом, при переносе кода на OSX, приходится лупать глазами...А вот что плохого в этой реализации (как я понял из книжки)? Или все хорошо? :) Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Old от Сентябрь 24, 2014, 14:37 А разве вообще разрешено вот так просто тэмплэйт впихивать в typedef? Конечно, когда наугад пытаешься писать. :)Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Pupil от Сентябрь 24, 2014, 14:43 Я правильно понял, что использовании класса template необходимо в объявлении экземпляра явно указывать тип переменной, чтобы уйти от абстракции типа Data?
Пример сам по себе хороший - в теоретической части -том 1 - он неполный... ) Название: Re: Пример из Павловской. Шаблон класса. Отправлено: OKTA от Сентябрь 24, 2014, 14:50 А разве вообще разрешено вот так просто тэмплэйт впихивать в typedef? Конечно, когда наугад пытаешься писать. :)Хм, на сколько я знаю, делать шаблонные typedef типа typedef List<class Data> lst можно по-человечески только в c++11 через using, а до этого приходилось придумывать всякие конструкции в обход. Или я что-то путаю? Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Pupil от Сентябрь 24, 2014, 14:53 Я учусь и не уразумею. Сейчас пролучилось без typedef )
Спасибо! Название: Re: Пример из Павловской. Шаблон класса. Отправлено: m_ax от Сентябрь 24, 2014, 16:01 А вот что плохого в этой реализации (как я понял из книжки)? Или все хорошо? :) Со стандартными алгоритмами его не попользуешь) А вообще, подобные примеры не стоит воспринимать всерьёз, поскольку у них немного другое предназначение) Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Igors от Сентябрь 24, 2014, 16:36 Со стандартными алгоритмами его не попользуешь) Да, итератров не видно. Но мне совсем др минус бросился в глазаНазвание: Re: Пример из Павловской. Шаблон класса. Отправлено: Pupil от Сентябрь 29, 2014, 15:54 Какой минус- можно узнать? )
Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Igors от Сентябрь 29, 2014, 16:25 Какой минус- можно узнать? ) Нет кеша, new/delete вызывается на каждый чих. Конечно от учебного примера это не требуется, но если надо будет выжимать скорость - такой список будет притормаживать.Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Pupil от Сентябрь 29, 2014, 18:40 А есть где такой пример-учебный- только правильный и оптимизированный? )
Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Igors от Сентябрь 30, 2014, 09:16 А есть где такой пример-учебный- только правильный и оптимизированный? ) 1) учебный 2) правильный 3) оптимизированныйМожно выбрать только 2 из 3 :) Если "правильный и оптимизированный" - то стандартный std::list. Исходники есть, можно пройти по шагам в отладчике gdb или MSVC. Правда мало не покажется, текст там очень уродлив, понять его трудно. Название: Re: Пример из Павловской. Шаблон класса. Отправлено: Pupil от Сентябрь 30, 2014, 09:50 Igors, Спасибо!
|