Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
1

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

01.06.2012, 15:02. Показов 913. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2012, 15:02
Ответы с готовыми решениями:

Наследование метода
Приветствую, формучане. Вообщем, имеется класс. Class A { protected first_method () ...

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

Наследование и вызов метода
есть базовый класс и класс потомок. class a { protected int a; protected int b; public a()...

Запрет на наследование метода
Всем привет. Помогите, кто знает. Нужно сделать так. 1. Создать класс А, в котором все методы...

4
DU
1495 / 1141 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
01.06.2012, 16:39 2
Beast - это шаблон. поэтому, чтобы можно было писать так:
class Wolf: public Beast, нужно, чтобу у этого шаблона был аргумент по умолчанию либо явно указывать какой-то тип:
class Wolf: public Beast<int>
1
программист С++
841 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
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
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
1495 / 1141 / 165
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2012, 17:08

Наследование. Переопределение метода родителя
не работает конструкция вида: class AllFigureData { protected: int id; int x; int y;...

Наследование и upcast параметров метода
class A { public virtual void M(int a) { ...

Запрет наследование абстрактного метода
Абстрактный класс ValueType наследует от Object-a Только 3 метода, или наследует все но видны 3...

Наследование статического метода в интерфейсе
знаю, это самые азы, но мне раньше просто не было необходимости писать интерфейсы (как то без них...

Наследование метода toString() в производном классе
В главном классе определил метод toString(): /// &lt;summary&gt; /// вывод на экран значений ...

Шаблон метода класса
Здравствуйте, могу ли я создавать шаблоны методов &quot;нешаблонных&quot; классов? например class...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru