Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 11:17   #1
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию Временные классы

Код:
Код:
template <class T>
class List{
private:
    struct list{
        T data;
        list *next,*prev;
    };
    list *start,*end;
    int size;
public:
    List();
};

List::List(){
    start=new list;
    end=new list;
};
Ошибка:
Цитата:
invalid use of template-name ‘List’ without an argument list
Только начинаю работать с template. В чем я напортачил?)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 01.06.2011, 11:19   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Почитал Страуструпа, понял.
Надо вот так:
Код:
template<class T> List<T>::List(){
    start=new list;
    end=new list;
};
Тема закрыта)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 01.06.2011, 11:23   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
template<class T>
Я бы рекомендовал использовать typename T, вместо class T
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 01.06.2011, 11:30   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Я бы рекомендовал использовать typename T, вместо class T
спасибо, учту. а почему?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 01.06.2011, 12:56   #5
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Blade
сейчас typename чаще используется для встроенных типов, когда class для user defined, как учил александрески. хотя принципиальной разницы, конечно, нет
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 01.06.2011, 23:08   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Код:
template <class T>
class List{
private:
    struct list{
        T data;
        list *next,*prev;
    };
    list *start,*end;
    int size;
    list find(int);
public:
    List();
};
Никак не могу нормально объявить функцию find в коде. На это копмилятор ругается:

Код:
template <typename T> List<T>::list List<T>::find(int n){

};
И на это тоже:

Код:
template <typename T> list List<T>::find(int n){

};
Ошибка:
Цитата:
error: need ‘typename’ before ‘List<T>::list’ because ‘List<T>’ is a dependent scope
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 01.06.2011 в 23:20.
Granus вне форума Ответить с цитированием
Старый 02.06.2011, 01:29   #7
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Сообщение об ошибке какое-то левое, но точки с запятой после функции быть не должно.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 02.06.2011, 09:38   #8
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Уже разобрался.
Нужно было последовать указанию ошибки и написать typename:
Код:
template <typename T> typename List<T>::list List<T>::find(int n){

};
А вот про точки с запятой после функции Вы зря. По стандарты вроде да, нехорошо, но используемые компиляторы не ругаются, а по мне код выглядит как-то более завершенным.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 02.06.2011, 09:45   #9
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Нужно было последовать указанию ошибки и написать typename
В итоге у вас получился код, отдаленно напоминающий шаблоны С++. И какой только компилятор это сжевывает? Там не должно быть typename.
Цитата:
Сообщение от Granus Посмотреть сообщение
А вот про точки с запятой после функции Вы зря. По стандарты вроде да, нехорошо, но используемые компиляторы не ругаются, а по мне код выглядит как-то более завершенным.
Есть мнемоническое правило - точка с запятой ставится после операторов и объявлений. Вы нарушаете его, тем самым не завершая код, а искажая его (да и не факт, что все компиляторы это будут терпеть. Скорее так: факт, что это не все компиляторы будут терпеть). А о других программистах вы подумали, которые читать ваш код будут? Вы в русский язык новшеств не вводите, надеюсь?
Ищете информацию по C++?
cplusplus.com

Последний раз редактировалось Сtrl; 02.06.2011 в 09:50.
Сtrl вне форума Ответить с цитированием
Старый 02.06.2011, 09:51   #10
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
В итоге у вас получился код, отдаленно напоминающий шаблоны С++.
Ну расскажите тогда, как правильно-то?)
Цитата:
И какой только компилятор это сжевывает?
Цитата:
не факт, что все компиляторы это будут терпеть
GCC все терпит и все сжевывает)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Временные графики spectun Помощь студентам 11 11.12.2010 11:51
временные функции Assemblerru Общие вопросы C/C++ 2 04.04.2010 12:43
Временные диаграммы systemmind Microsoft Office Excel 5 05.10.2009 17:33
Временные задержки dgoc Помощь студентам 1 05.12.2007 05:03