С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 26.06.2018
Сообщений: 19

Наследование, шаблоны классов

26.06.2018, 19:25. Показов 1216. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Все привет.
Есть два шаблона классов, один наследует другой. Первый класс абстрактный, содержит только чисто виртуальные функции. Во втором классе я их переопределяю. Но почему то вылезают вот такие ошибки

Error (active) object of abstract class type "MyContainer<std::string, std::string>" is not allowed

Error C2259 'MyContainer<std::string,std::string>': cannot instantiate abstract class

я так понимаю он ругает на то что я пытаюсь создать экземпляр абстрактного класса, но я ведь этого не делаю...
вот код
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
template<class K, class V>
class A
{
public:
    virtual ~A() = default;
 
    virtual const V& Get(const K& k) const = 0;
    virtual void Set(const K& k, const V& v) = 0;
    virtual bool IsSet(const K& k) const = 0;
};
 
template<class K, class V>
class B : public A<K, V> 
{
public:
    virtual const V& Get(const K& k) 
    {
        //код
    }
    virtual void Set(const K& k, const V& v) 
    {
        //код
    }
    virtual bool IsSet(const K& k) 
    {
        //код
    }
};
 
int main() {
 
    B<string, string> myBstr; //здесь ругается
    B<int, int> myBint;          //здесь ругается
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.06.2018, 19:25
Ответы с готовыми решениями:

Шаблоны классов, наследование и использование this
Привет, есть такой код: #include &lt;iostream&gt; template &lt;typename T&gt; struct B { void exit(); };

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс CGraphicsObject, его наследник - базовый...

Заменить наследование классов на наследование интерфейсов
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

4
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
26.06.2018, 19:38
В 7й и 9й строках const лишний на конце. Или наоброт не хватает его в 16й и 24й строках.
1
0 / 0 / 0
Регистрация: 26.06.2018
Сообщений: 19
26.06.2018, 19:48  [ТС]
Точно! блин я затупа, спасибо =)
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
26.06.2018, 21:13
Если доступен C++11, то для виртуальных функций в наследниках добавляйте идентификатор override:
C++
1
2
3
4
5
6
7
8
9
template<class K, class V>
class B : public A<K, V> 
{
public:
    const V& Get(const K& k) override
    {
        //код
    }
//...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.06.2018, 21:15
Цитата Сообщение от AntoSKA53 Посмотреть сообщение
Точно! блин я затупа, спасибо =)
AntoSKA53, иногда лучше добавить что-то не нужное чем убрать что-то нужное.
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
48
49
50
51
// prg_title abstract template class vs const member methods
#include<iostream>
using namespace std;
template<class K, class V>
class A
{
public:
    virtual ~A() = default;
 
    virtual const V& Get(const K& k) const = 0;
    virtual void Set(const K& k, const V& v) = 0;
    virtual bool IsSet(const K& k) const = 0;
};
 
template<class K, class V>
class B : public A<K, V>
{
public:
    V m_v;
    K m_k;
    B(){}
    B(const K& k, const V& v)
    :m_k(k)
    ,m_v(v)
    {    }
 
    virtual const V& Get(const K& k)const
    {
        //k тут нужен как зайцу компилятор
        return this->m_v;
    }
    virtual void Set(const K& k, const V& v)
    {
        m_k=k;
        m_v=v;
    }
    virtual bool IsSet(const K& k)const
    {
        return 1;
    }
};
 
int main() {
 
    B<string, string> myBstr("wow","lol"); //здесь не ругается
    cout<<myBstr.m_k<<' '<<myBstr.m_v<<endl;
    B<int, int> myBint(1,2);          //здесь не ругается
    cout<<myBint.m_k<<' '<<myBint.m_v<<endl;
cin.get();
    return 0;
}
Дело вкуса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2018, 21:15
Помогаю со студенческими работами здесь

Шаблоны классов (умножение классов)
Прошу помочь, нужно создать шаблон для умножения значений 2-х классов. Умножить классы просто получается, а вот с шаблонами какая то...

Наследование классов. Копирование производных классов
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

Наследование и шаблоны
Доброго времени суток всем! Требуется внести ясность в следующую задачу. Существует абстрактный класс AbstractGenerator&lt;имя типа&gt;...

Наследование и шаблоны
Почему при использовании шаблонов при обращении к элементам класса нужно явно указывать потомка или this? Ведь при наследовании без...

Наследование и шаблоны
Не понимаю почему выдается ошибки, переменные а, b не объявлены в данном контексте (внутри функции f) Сейчас почитал прату, и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru