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

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

Войти
Регистрация
Восстановить пароль
 
unandro
2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
#1

Шаблон данных метода кдасса, наследование - C++

01.06.2012, 15:02. Просмотров 420. Ответов 4
Метки нет (Все метки)

Eсть 3 класс 1 базовый 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
class Beast
{
    public:
        int x;
        int y;
        int day;
};
 
class Rabbit: public Beast{};
std::vector<Rabbit> rabbit;
 
class Wolf: public Beast
{
    public:
        int hungry;
};
std::vector<Wolf> wolf;
 
template <typename T>
void Start_Beast(int number_beasts, int beast_life, std::vector<T> &beast)
{
    /* ... */
}
Пытаюсь функцию сделать методом:
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
template <typename T>
class Beast
{
    public:
        int x;
        int y;
        int day;
        void Start_Beast(int number_beasts, int beast_life, std::vector<T> &beast);
};
 
class Rabbit: public Beast{};
std::vector<Rabbit> rabbit;
 
class Wolf: public Beast
{
    public:
        int hungry;
};
std::vector<Wolf> wolf;
 
template <typename T>
void Beast::Start_Beast(int number_beasts, int beast_life, std::vector<T> &beast)
{
    /* ... */
}
получаю ошибки при компиляции.. ссылающиеся на строки классов wolf и rabbit
ошибка: expected class-name before «{» token
В чем проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 15:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон данных метода кдасса, наследование (C++):

Шаблон параметр шаблона и наследование - C++
Есть вот такой базовый класс, который описывает абстрактный доступ к контейнеру stl: template&lt; template&lt;typename, typename&gt; class...

Шаблон метода в классе - C++
Скажите, не могу использовать метод в классе на основе шаблона. Не выходит. class MYCLASS { public: MYCLASS(); ~MYCLASS(); ...

Шаблон метода класса - C++
Здравствуйте, могу ли я создавать шаблоны методов &quot;нешаблонных&quot; классов? например class My_class { public: template&lt;class Data&gt; ...

Шаблон в качестве аргумента метода(функции) - C++
Доброго дня! Возник вопрос. Существует ли возможность определить параметр метода, указав тип шаблона, но не указывая конкретные типы...

Вектор пользовательского типа данных + наследование - C++
Доброго времени суток. Дело в чём: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class A { ...

Контейнер, наследование и разные типы данных - C++
День добрый. Вопрос собственно не один а три. Но основной один. Как удрать if'ы на участре кода №1. Так же приму советы по...

4
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
01.06.2012, 16:39 #2
Beast - это шаблон. поэтому, чтобы можно было писать так:
class Wolf: public Beast, нужно, чтобу у этого шаблона был аргумент по умолчанию либо явно указывать какой-то тип:
class Wolf: public Beast<int>
1
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
01.06.2012, 16:50 #3
пример
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
#include <vector>
#include <iostream>
 
template <typename T>
class Beast
{
public:
    int x;
    int y;
    int day;
    void Start_Beast(int number_beasts, int beast_life, std::vector<T> &beast);
};
 
template <typename T>
class Rabbit: public Beast<T> {};
std::vector<Rabbit<int> > rabbit;
 
template <typename T>
class Wolf: public Beast<T>
{
public:
    int hungry;
};
std::vector<Wolf<void> > wolf;
 
template <typename T>
void Beast<T>::Start_Beast(int number_beasts, int beast_life, std::vector<T> &beast)
{
    /* ... */
}
 
int main()
{
    return EXIT_SUCCESS;
}
1
unandro
2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
03.06.2012, 11:06  [ТС] #4
А как потом мне обращаться из main к методу Start_Beast?

Добавлено через 17 часов 2 минуты
Пробую так
C++
1
2
    Rabbit<int> rabbit0;
    rabbit0.Start_Beast(1,1,rabbit);
получаю
last3.cpp: В функции «int main()»:
last3.cpp:35:35: ошибка: нет подходящей функции для вызова «Rabbit<int>::Start_Beast(int, int, std::vector<Rabbit<int> >&)»
last3.cpp:35:35: замечание: candidate is:
last3.cpp:27:6: замечание: void Beast<T>::Start_Beast(int, int, std::vector<T>&) [with T = int]
last3.cpp:27:6: замечание: no known conversion for argument 3 from «std::vector<Rabbit<int> >» to «std::vector<int, std::allocator<int> >&»
Как мне теперь передавать вектор то?
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
04.06.2012, 17:08 #5
читайте внимательно ошибки:
last3.cpp:27:6: замечание: no known conversion for argument 3 from «std::vector<Rabbit<int> >» to «std::vector<int, std::allocator<int> >&»
функция ожидает, что третий аргумент будет ссылка на std::vector<int>, а вы ей отдаете std::vector<Rabbit<int>>

std::vector<int> != std::vector<Rabbit<int>>
1
04.06.2012, 17:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2012, 17:08
Привет! Вот еще темы с ответами:

Наследование - не могу определить пользовательский тип данных - C++
Доброго вечера! Я запутался с наследованием. Определил класс Dlina, состоящий из метров и сантиметров, в котором перегрузил операцию...

Шаблон структуры данных - C++
Всем привет, в универе дали задание, не понимаю совсем, напишите пожалуйста, Разработать шаблоны структуры данных в памяти. Тип...

Шаблон структуры данных - C++
Задание на курсовую работу: шаблон структуры данных – массив указателей на заголовки списков. Элемент списка содержит указатель на объект....

Шаблон класса. Пользовательский тип данных - C++
Всем привет. Помогите с кодом. Не получается сделать пользовательский тип данных. Создаю объект в главной функции, но выдаёт ошибку если...


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

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

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