Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

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

05.04.2013, 03:51. Просмотров 618. Ответов 12
Метки нет (Все метки)

Здорова господа!
Снова пытаюсь написать шаблон и сново программа не компилируется
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 минуты
Да видимо правила какие то оформления есть, а я так отфанаря фиг чо угадаю как чо делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2013, 03:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу создать шаблон (C++):

Не могу оформить шаблон функций С++ - C++
Подскажите как правильно оформить шаблон функций #include &quot;iostream&quot; #include &quot;math.h&quot; //подключение мат. библиотеки #include...

Создать шаблон - C++
Создать шаблон класса для работы с одномерным массивом. Выполнить тестирование путем создания и обработки массивов, со- ...

Создать шаблон класса - C++
Общая постановка. Дано: число N и последовательность a1, a2, … aN Создать шаблон класса, порождающего динамические одномерные массивы с...

создать шаблон функции - C++
Помогите с шаблонами функций, пожалуйста, первый пункт выполнил вроде. Создать: 1)перегружаемые функции для типов int и double ...

Создать шаблон динамического списка - C++
спроектировать шаблон для класса динамический список Создать конструкторы: по умолчанию, с параметрами и копирования и продемонстрировать...

Создать шаблон класс Queue - C++
Создать шаблон класс Queue. Добавить след. методы: 1. добавление узла после заданного элемента 2. удаление последнего узла 3....

12
alsav22
5426 / 4821 / 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;
}
1
ninja2
231 / 187 / 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 секунд
Надо видимо дополнительный параметр в шаблон добавлять.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2013, 06:07 #4
Какая среда? У меня не вылазит (студия 2010).
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 06:26  [ТС] #5
alsav22, без среды просто компилятор g++

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

Добавлено через 2 минуты
нет все рамно ошибка
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2013, 06:37 #6
Получается, что объявление нужно убрать из класса.
1
ninja2
231 / 187 / 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 секунд
Все короче разобрался тема закрыта.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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;
}
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 06:55  [ТС] #9
Конечно весело кода один шаблон будет компилироваться в одном компиляторе, а в другом не будет

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

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

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

Добавлено через 35 секунд
Ни каких правил как хочешь так и создаешь лишь бы работало.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
05.04.2013, 06:56 #10
Цитата Сообщение от ninja2 Посмотреть сообщение
А если этот шаблон создать в (студия 2010), то яж его уже не скомпилирую.
компилируется без проблем.
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 06:59  [ТС] #11
Croessmah, Нет не этот, а тот который в alsav22 компилируется без ошибок, а у меня с ошибками, тот пример кода.

Добавлено через 48 секунд
Мой самый первый пример у чувака ошибки не вылазят (предупреждения)
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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 выдает предупреждение, студия нет
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
05.04.2013, 07:29  [ТС] #13
Ладно проехали я думаю шаблоны создавать в жизни не понадобиться.

Добавлено через 34 секунды
А если и понадобиться, то там мелоч какую нить.
0
05.04.2013, 07:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 07:29
Привет! Вот еще темы с ответами:

Создать шаблон типа Char - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;string&gt; using namespace std; char a; int aa,a1,sk=50,k=0; template &lt;char T&gt; ...

создать класс шаблон Vector - C++
создать класс шаблон Vector, который отличается от класса Array тем , что в данном классе можно как добавлять элементы , так и удалять...

Как правильно создать шаблон функции - C++
как мне правильно создать шаблон,чтобы работала ф-ция sub() ? #include&lt;iostream&gt; using namespace std; template&lt;typename...

Написать шаблон функции, и Создать класс. - C++
Помогите ктота пожалуста ... Ето надо на С++ зделать. Спасибо за рание! 1. Написать шаблон функции вычисления произведения двух...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru