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

Не могу создать шаблон - C++

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 03:51     Не могу создать шаблон #1
Здорова господа!
Снова пытаюсь написать шаблон и сново программа не компилируется
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
#include <iostream>
using std::cout;
using std::endl;
 
template<typename C>
class String
{
    class Cref;
public:
    //peregryzka dl9 chteni9 i zapici ne konctantnux ob6ektov
    Cref operator[](int i);
    
    friend bool operator!=(const String& x, const char* s);
};
 
template<typename C>
class String<C>::Cref{};
 
template<typename C>
String<C>::Cref String<C>::operator[](int i)
{
    
}
 
template<typename C>
bool operator!=(const String<C>& x, const String<C>& y)
{
    
}
 
int main()
{
    
    
    return 0;
}
Выдает ошибку:

./test1.cpp:13:55: предупреждение: friend declaration «bool operator!=(const String<C>&, const char*)» declares a non-template function [-Wnon-template-friend]
./test1.cpp:13:55: замечание: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here)
./test1.cpp:20:1: ошибка: need «typename» before «String<C>::Cref» because «String<C>» is a dependent scope


Если без шаблона то все нормально компилируется и как мне еще убрать предупреждение?
Я чо токо не пробовал методом тыка ничо не помогает.

Добавлено через 1 час 5 минут
Я вроде с первой ошибкой разобрался это с предупреждениями просто перед дружеской функцией влепил template<typename> без параметров, а как же мне ошибку исправить?
Хелп!

Добавлено через 5 минут
Господа как эту ошибку убрать?
./test1.cpp:20:22: ошибка: need «typename» before «String<C>::Cref» because «String<C>» is a dependent scope

я уже и так пробовал:
C++
1
2
3
4
template<typename C> String<C>::Cref template<typename C> String<C>::operator[](int i)
{
    
}
и по другому как попало ничо не выходит.
Ну чо вы такие вялые? Помогайте!

Добавлено через 2 минуты
Что за ошибка не понятная? Нужно typename перед «String<C>::Cref», а перед ним чо не стоит? Онож ведь стоит.

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

Добавлено через 1 минуту
Сами разбирайте если кто не понял, тут вопрос детский. Так на засыпку подумать. С подвохом вопрос.

Добавлено через 22 минуты
Всетоки перед дружественной функцией вроде не правильно ставить пустой шаблон, ана как то после этого становиться не дружественной или фиг его знает, но к закрытым членам не может обращаться вроде. Как же шаблон дружественной функции написать?

Добавлено через 2 минуты
Господа как правильно создавать шаблон для дружественных функций класса?

Добавлено через 13 минут
Ладно пошол читать литературу. Явно неправильно я его создаю.

Добавлено через 2 минуты
Да видимо правила какие то оформления есть, а я так отфанаря фиг чо угадаю как чо делать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2013, 03:51     Не могу создать шаблон
Посмотрите здесь:

C++ Создать шаблон класса типа стек
Создать шаблон класс Queue C++
C++ создать шаблон функции
Создать шаблон для вычисления среднего C++
C++ создать класс шаблон Vector
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2013, 05:06     Не могу создать шаблон #2
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
#include <iostream>
using std::cout;
using std::endl;
 
template<typename C>
class String
{
    class Cref
    {
       public:
            Cref();
    };
public:
    //peregryzka dl9 chteni9 i zapici ne konctantnux ob6ektov
    Cref operator[](int i);
    
    friend bool operator!=(const String& x, const char* s);
};
 
template<typename C>
String<C>::Cref::Cref(){}
 
template<typename C>
typename String<C>::Cref String<C>::operator[](int i)
{
    
}
 
template<typename C>
bool operator!=(const String<C>& x, const String<C>& y)
{
    
}
 
int main()
{
    
    
    return 0;
}
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 05:17  [ТС]     Не могу создать шаблон #3
alsav22, всермно предупреждение вылазит для дружественных функций

/test1.cpp:17:58: предупреждение: friend declaration «bool operator!=(const String<C>&, const char*)» declares a non-template function [-Wnon-template-friend]
./test1.cpp:17:58: замечание: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here)


Добавлено через 37 секунд
Надо видимо дополнительный параметр в шаблон добавлять.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2013, 06:07     Не могу создать шаблон #4
Какая среда? У меня не вылазит (студия 2010).
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 06:26  [ТС]     Не могу создать шаблон #5
alsav22, без среды просто компилятор g++

Добавлено через 47 секунд
да я вроде токо вычитал ошибку нужно после функций добавить <> отакую пустую фигню. Щас испробую

Добавлено через 2 минуты
нет все рамно ошибка
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2013, 06:37     Не могу создать шаблон #6
Получается, что объявление нужно убрать из класса.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 06:50  [ТС]     Не могу создать шаблон #7
alsav22, не знаю отак получается
C++
1
2
template<typename T>
    friend bool operator!=(const String<T>& x, const char* s);
Дальше токо при перегрузке operator << ошибка вылазит.

Добавлено через 4 минуты
Оказывается не вылазит нужно новый шаблон для всех функций как бы создать с новыми параметрами даже класса.

Добавлено через 18 секунд
Все короче разобрался тема закрыта.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
05.04.2013, 06:50     Не могу создать шаблон #8
Цитата Сообщение от ninja2 Посмотреть сообщение
Дальше токо при перегрузке operator << ошибка вылазит.
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
#include <iostream>
using std::cout;
using std::endl;
 
template<typename C>
class String
{
    class Cref
    {
       public:
            Cref();
    };
public:
    //peregryzka dl9 chteni9 i zapici ne konctantnux ob6ektov
    Cref operator[](int i);
    template<typename T>
    friend bool operator!=(const String<T>& x, const char* s);
    template<typename T>
    friend std::ostream & operator<<(std::ostream & lhv,String<T> & rhv);
};
 
template<typename C>
String<C>::Cref::Cref(){}
 
template<typename C>
typename String<C>::Cref String<C>::operator[](int i)
{
    
}
 
template<typename C>
bool operator!=(const String<C>& x, const String<C>& y)
{
    
}
 
template<typename C>
std::ostream & operator<<(std::ostream & lhv,String<C> & rhv){
}
 
int main()
{
    String<char> str1;
    String<char> str2;
    str1!=str2;
    return 0;
}
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 06:55  [ТС]     Не могу создать шаблон #9
Конечно весело кода один шаблон будет компилироваться в одном компиляторе, а в другом не будет

Добавлено через 1 минуту
Croessmah, Да все правильно, то я раньше без параметров перегружал просто template<typename> тада вылазила ошибка, а так все норм.

Добавлено через 54 секунды
Croessmah, а по правилам это, что нужно обязательно для дружественных функций создавать отдельный как бы шаблон?

Добавлено через 1 минуту
Как бы обязаловка. А если этот шаблон создать в (студия 2010), то яж его уже не скомпилирую.

Добавлено через 35 секунд
Ни каких правил как хочешь так и создаешь лишь бы работало.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
05.04.2013, 06:56     Не могу создать шаблон #10
Цитата Сообщение от ninja2 Посмотреть сообщение
А если этот шаблон создать в (студия 2010), то яж его уже не скомпилирую.
компилируется без проблем.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 06:59  [ТС]     Не могу создать шаблон #11
Croessmah, Нет не этот, а тот который в alsav22 компилируется без ошибок, а у меня с ошибками, тот пример кода.

Добавлено через 48 секунд
Мой самый первый пример у чувака ошибки не вылазят (предупреждения)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
05.04.2013, 07:07     Не могу создать шаблон #12
Можно, например, еще вот так сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename C>
class String
{
    class Cref
    {
       public:
            Cref();
    };
public:
    //peregryzka dl9 chteni9 i zapici ne konctantnux ob6ektov
    Cref operator[](int i);
    template<C>
    friend bool operator!=(const String& x, const String& y);
    template<C>
    friend std::ostream & operator<<(std::ostream & lhv,String & rhv);
};
Цитата Сообщение от ninja2 Посмотреть сообщение
а у меня с ошибками
MinGW выдает предупреждение, студия нет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 07:29     Не могу создать шаблон
Еще ссылки по теме:

Создать шаблон класса C++
Создать шаблон C++
Создать шаблон динамического списка C++

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

Или воспользуйтесь поиском по форуму:
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 07:29  [ТС]     Не могу создать шаблон #13
Ладно проехали я думаю шаблоны создавать в жизни не понадобиться.

Добавлено через 34 секунды
А если и понадобиться, то там мелоч какую нить.
Yandex
Объявления
05.04.2013, 07:29     Не могу создать шаблон
Ответ Создать тему
Опции темы

Текущее время: 06:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru