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

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

Восстановить пароль Регистрация
 
unandro
2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
01.06.2012, 15:02     Шаблон данных метода кдасса, наследование #1
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
В чем проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
01.06.2012, 16:39     Шаблон данных метода кдасса, наследование #2
Beast - это шаблон. поэтому, чтобы можно было писать так:
class Wolf: public Beast, нужно, чтобу у этого шаблона был аргумент по умолчанию либо явно указывать какой-то тип:
class Wolf: public Beast<int>
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 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;
}
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> >&»
Как мне теперь передавать вектор то?
DU
1477 / 1053 / 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>>
Yandex
Объявления
04.06.2012, 17:08     Шаблон данных метода кдасса, наследование
Ответ Создать тему
Опции темы

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