7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
|
||||||
1 | ||||||
Компиляция кода с ромбовидным наследованием16.12.2016, 09:50. Показов 1661. Ответов 31
Метки нет (Все метки)
Здравствуйте. Я написал элементарное наследование. На VS 2015 всё компилится, а на CLion нет. В чём может быть проблема?
error: ‘A’ is an ambiguous base of ‘C’ У меня есть только одно предположение. В VS выдаётся точно такое же сообщение, но в качестве предупреждения, а не ошибки. Возможно в CLion другой уровень возбуждения этой ошибки и можно прописать #pragma warning(disable : ) и всё начнёт работать как надо?
0
|
16.12.2016, 09:50 | |
Ответы с готовыми решениями:
31
Компиляция/добавление кода без видимости самого кода(сложно объяснить) Исполнение кода, написанного в текстовом файле (динамическая компиляция кода) Формирование низкоуровневого кода (компиляция кода на С из текстового файла) Компиляция кода |
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
16.12.2016, 10:05 | 2 |
ну а что вы хотели? у вас в классе С "находиться" 2 экземпляра класса А (он его наследует напрямую и через B)
Добавлено через 1 минуту работать может и начнет, но такая запись в принципе недопустима и бесполезна...
0
|
16.12.2016, 10:06 | 3 | |||||
Ну а вы чего хотели? Классический пример применения виртуального наследования:
0
|
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
|
|
16.12.2016, 10:46 [ТС] | 4 |
Мне как раз и нужно, чтобы в C было 2 элемента a. Один из класса A, второй - из B. Это нам в универе объясняли наследование. И надо было реализовать следующую цепочку наследований (я понимаю, что в этом случае должно быть не наследование классов, а их вложение, но для закрепления материала нужно реализовать через наследование). И всё сводится к тому, что B наследует A, а C наследует B и A. И класс A должен быть в классе C в двух экземплярах.
0
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
||||||
16.12.2016, 10:55 | 5 | |||||
что приводит к неоднозначности... люди решают такие проблемы, а вы наоборот пытаетесь ее сделать))))
а ну да, это не ромбовидное наследование) Добавлено через 2 минуты вот вам "ромбовидное наследование" (если такой термин вообще есть):
и на картиночке у вас нет ни одного класса, который бы наследовался так, как пишите вы...
0
|
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
|
|||||||||||
16.12.2016, 11:04 [ТС] | 6 | ||||||||||
Извиняюсь, ошибся. Но что делать, если такое дали задание. Мы немного ушли от темы. Я всё это написал и под VS запустил, но на CLion не смог из за ошибки. А вот почему эта ошибка в VS не возникает, а в CLion возникает - не понял.
Добавлено через 2 минуты вот кусок кода
Класс RAM должен быть и в VideoAdapter и в PC. Причём в PC у меня должен быть RAM для PC и RAM для VideoAdapter Добавлено через 1 минуту Я могу скинуть весь проект, но он большой и в нём не очень удобно ориентироваться.
0
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
16.12.2016, 11:04 | 7 |
LoSyAsH, вам нужно в настройках компилятора CLion покопаться.
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
16.12.2016, 11:05 | 8 |
Сообщение было отмечено LoSyAsH как решение
Решение
Есть. От него там действительно хотят, чтобы класс RAMInfo порождал при наследовании один подобъект для GPUInfo и другой для PCInfo. Я думаю, имеется в виду, что это разная память (оперативная и on-board ram в видеокарте), соответственно объекты тоже должны быть разные. Давать оценку этому архитектурному ходу дело неблагодарное, я бы конечно учить наследованию не начинал с таких спорных примеров, но задание есть задание. Он его не сможет, скорее всего, изменить.
LoSyAsH, скорее всего где-то выставлен ключ -Werror , который заставляет компилятор трактовать предупреждения как ошибки.Неоднозначность действительно будет (предупреждение совершено справедливо), нужно будет тебе подумать, как эту неоднозначность разрешать.
3
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
16.12.2016, 11:06 | 9 |
тут определенно нужно применять виртуальное наследование)))
зачем нашему PCInfo (информация о компьютере) дублирование информации о RAM, MemoryInfo, и т.д.
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
16.12.2016, 11:12 | 10 |
Очень зря ты убрал слово info из названий классов. Если для классов информации еще можно как-то за уши притянуть наследование, то вот компьютер от видеокарты точно не наследуется! Не усугубляй и без того шаткое положение
0
|
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
|
|
16.12.2016, 11:12 [ТС] | 11 |
Вот сам проект
0
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
16.12.2016, 11:12 | 12 |
0
|
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
|
|
16.12.2016, 11:13 [ТС] | 13 |
Я это понимаю. И на паре нас об этом тоже предупредили. Но реализовать надо...
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
16.12.2016, 11:13 | 14 |
В целом, для этой схемы больше подошла бы агрегация.
Информация точно так же может включать в себя другую информацию, наследование тут очень сомнительное решение.
0
|
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
|
|
16.12.2016, 11:15 [ТС] | 15 |
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
16.12.2016, 11:16 | 16 |
Реализуй (думаю, очень редко когда задание можно оспорить - люди не любят признавать ошибки), но слово info верни на место, чтобы было как на схеме.
Добавлено через 36 секунд Э, ты чего такое говоришь-то? Я как бы про наследование выше и говорил Читай внимательнее.
0
|
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
|
|
16.12.2016, 11:16 [ТС] | 17 |
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
16.12.2016, 11:17 | 18 |
LoSyAsH, еще раз, в настройках среды где-то есть ключ. Надо его убрать. Приступай
0
|
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
|
|
16.12.2016, 11:20 [ТС] | 19 |
Попробую убрать этот ключ.
Я правильно понял, что ты имеешь ввиду, что у меня должен быть отдельный класс PC_RAM и VideoAdapter_RAM?
0
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
16.12.2016, 11:23 | 20 |
ну вообще это было б логично, но так как у тебя на схеме ничего подобного не указано, то лучше оставить все так как есть) пусть это будет на совести преподавателя)
0
|
16.12.2016, 11:23 | |
16.12.2016, 11:23 | |
Помогаю со студенческими работами здесь
20
Компиляция кода Компиляция кода Компиляция кода Компиляция с++ кода на с# Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |