|
|
||||||
Наследование шаблона20.06.2012, 12:53. Показов 1166. Ответов 13
Метки нет (Все метки)
Есть два шаблона Array and NumericArray
Хочется реализовать между ними иерархию типа NumericArray диревативынй класс а Array родительский. Вообщем вроде что то получается, но вот какая ошибка вылезла не могли бы посмотреть. Заранее спасибо ! compiler error: 1>------ Build started: Project: HP3_4.2b_ex2_with_inheritance, Configuration: Release Win32 ------ 1> main.cpp 1>main.cpp(9): error C2143: syntax error : missing ';' before 'using' 1>main.cpp(9): error C2143: syntax error : missing ';' before '<end Parse>' ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== last edition of my code:
0
|
||||||
| 20.06.2012, 12:53 | |
|
Ответы с готовыми решениями:
13
Как правильно производится наследование элементов от шаблона класса? В чем ошибка? |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 20.06.2012, 13:27 | ||||||
1
|
||||||
|
|
|||||||
| 20.06.2012, 13:36 [ТС] | |||||||
|
1>------ Build started: Project: HP3_4.2b_ex2_with_inheritance, Configuration: Release Win32 ------ 1> main.cpp 1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(30): error C2614: 'NumericArray<Type>' : illegal member initialization: 'm_data' is not a base or member 1> with 1> [ 1> Type=Point 1> ] 1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(29) : while compiling class template member function 'NumericArray<Type>::NumericArray(int)' 1> with 1> [ 1> Type=Point 1> ] 1> main.cpp(14) : see reference to class template instantiation 'NumericArray<Type>' being compiled 1> with 1> [ 1> Type=Point 1> ] 1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(30): error C2614: 'NumericArray<Type>' : illegal member initialization: 'm_size' is not a base or member 1> with 1> [ 1> Type=Point 1> ] 1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(66): warning C4172: returning address of local variable or temporary 1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(59) : while compiling class template member function 'NumericArray<Type> &NumericArray<Type> erator *(double) const'1> with 1> [ 1> Type=Point 1> ] ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== "'m_data' is not a base or member" Но почему Я же реализовал наследование и типа сделал в родительско классе protected (not private ) ... Что опять не так ??? кстати вот реализация = оператора :
0
|
|||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
| 20.06.2012, 13:53 | |||||||||||
|
Leeto, А не логичнее-ли просто вызвать создание объекта array? Т.е.
Вместо.
1
|
|||||||||||
|
|
||
| 20.06.2012, 14:09 [ТС] | ||
|
1>------ Build started: Project: HP3_4.2b_ex2_with_inheritance, Configuration: Release Win32 ------ 1> main.cpp 1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(27): error C2065: 'size' : undeclared identifier 1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(27) : while compiling class template member function 'NumericArray<Type>::NumericArray(int)' 1> with 1> [ 1> Type=Point 1> ] 1> main.cpp(14) : see reference to class template instantiation 'NumericArray<Type>' being compiled 1> with 1> [ 1> Type=Point 1> ] 1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(60): warning C4172: returning address of local variable or temporary 1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(53) : while compiling class template member function 'NumericArray<Type> &NumericArray<Type>::operator *(double) const' 1> with 1> [ 1> Type=Point 1> ] ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
|
||
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 20.06.2012, 14:11 | |
|
ну вы хоть ошибки то читаете? написано же, что size - неизвестный идентификатор. в конструкторе у аргумента имя не size а new_size.
и new_size - дуратское имя. когда мы в конструкторе никаких старых размеров еще не было. поэтому логичнее просто size. на ворнинги тоже обратите внимание. возвращать ссылки или указатели на локальные объекты нельзя. это приведет к падению програмы. в операторе * у вас как раз возвращение ссылки на локальный объект.
1
|
|
|
|
||
| 20.06.2012, 14:18 [ТС] | ||
|
но там воринги есть 1>------ Build started: Project: HP3_4.2b_ex2_with_inheritance, Configuration: Release Win32 ------ 1> main.cpp 1>c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(60): warning C4172: returning address of local variable or temporary 1> c:\all my\с++\ha level 6\solution\level 6\hp3_4.2b_ex2_with_inheritance\NumericA rray.h(53) : while compiling class template member function 'NumericArray<Type> &NumericArray<Type>::operator *(double) const' 1> with 1> [ 1> Type=Point 1> ] 1> main.cpp(14) : see reference to class template instantiation 'NumericArray<Type>' being compiled 1> with 1> [ 1> Type=Point 1> ] ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== насколько они критичны ? подскажите пожалуйста
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 20.06.2012, 14:19 | |
|
Уберите ссылку из возвращаемого типа и все.
1
|
|
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 20.06.2012, 14:21 | |
|
я уже написал что максимально критичны. программа будет вести себя неопределенным образом. скорее всего падать. оператор * должен возвращать объект а не ссылку на него. а вот оператор *= - уже ссылку. обычно один реализуется за счет другого. причем operator * делается как вравило в виде свободной функции.
вообще походче что NumericArray сделан только ради добавления оператора *. Но его можно сделать в виде свободной шаблонной функции для всего семейства классов Array<T>. Если для объектов типа T операция умножения на double корректна, то код будет компилироватся для массива объектов таких типов, если же такой операции нет - то просто не скомпилится попытка использовать такой оператор. если оператор для таких объектов не использовать, то все по прежнему будет компилиться.
1
|
|
|
|
|||
| 20.06.2012, 14:25 [ТС] | |||
|
Добавлено через 4 минуты
0
|
|||
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
| 20.06.2012, 14:31 | ||||||
|
я вот к чему. например для класса std::string реализована операция сложения. и ваш базовый класс для массива будет работать со строками. было бы логично воспользоватся возможностью прибавить к массиву строк другую строку, что приведет к сложению к каждому элементу массива этой строки. но в текущей реализации для этого просто Array<std::string> использовать нельзя. Нужно использовать NumericArray<std::string> что выглядит как-то кривовато. Пожно было бы написать одну шаблонную функцию для такого сложения и это бы компилилось в случае, если объекты массива поддерживают операцию сложения
1
|
||||||
|
|
||
| 20.06.2012, 14:50 [ТС] | ||
|
даже есть схемка UML ская )) Но огромное вам спасибо что вам не все равно )
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||
| 20.06.2012, 14:55 | ||
|
DU,
1
|
||
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||
| 20.06.2012, 14:59 | ||
|
Ну раз выбор осознанный, то ладно.
Еще в догонку у класса NumericArray нужны только конструкторы, для вызова конструкторов базового класса и дополнительные операторы + и *. Деструктор и оператор = не нужно по новому реализовывать. Все, что нужно уже делается в базовом классе.
1
|
||
| 20.06.2012, 14:59 | |
|
Помогаю со студенческими работами здесь
14
Определение метода-шаблона за пределами шаблона класса Заменить наследование классов на наследование интерфейсов Наследование конструктора от переменного шаблона Gtest, доступ к элементам базового класса-шаблона без указания параметров шаблона. баг или фича? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|