Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74

Компиляция кода с ромбовидным наследованием

16.12.2016, 09:50. Показов 2354. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я написал элементарное наследование. На VS 2015 всё компилится, а на CLion нет. В чём может быть проблема?
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 A {
protected:
    int a;
public:
    A(int i) : a(i) {}
};
 
class B : public A {
public:
    B(int i) : A(i) {}
};
 
class C : public B, public A {
public:
    C(int i1, int i2) : B(i1), A(i2) {}
    void print() { std::cout << "B(" << B::a << "), A(" << A::a << ")"; }
};
 
int main()
{
    C cc(2, 1);
    cc.print();
}
Причём если не обращаться к полю класса, то всё хорошо, но при обращении вылетает ошибка
error: ‘A’ is an ambiguous base of ‘C’

У меня есть только одно предположение. В VS выдаётся точно такое же сообщение, но в качестве предупреждения, а не ошибки. Возможно в CLion другой уровень возбуждения этой ошибки и можно прописать #pragma warning(disable : ) и всё начнёт работать как надо?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2016, 09:50
Ответы с готовыми решениями:

Компиляция/добавление кода без видимости самого кода(сложно объяснить)
Есть код по типу такого: static void Main() { Hm.Ex checker = new Hm.Ex();//Hm - namespace, Hm.Ex - class ...

Исполнение кода, написанного в текстовом файле (динамическая компиляция кода)
к примеру есть у меня форма а на ней кнопка, можно ли присваивать код кнопке с текстового файла? пример в текстовике: ...

Формирование низкоуровневого кода (компиляция кода на С из текстового файла)
Доброго времени суток, форумчане. Необходима информация о трансляции Си (без плюсов и решеток) кода в нечто более низкоуровневое...

31
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
16.12.2016, 11:25
Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
class MemoryInfo {};
class HDDInfo: virtual public MemoryInfo {};
class RAMInfo: virtual public MemoryInfo {};
 
class ProcessorInfo{};
class CPUInfo: virtual public ProcessorInfo {};
class GPUInfo: virtual public ProcessorInfo {};
 
class VideoAdapterInfo: public GPUInfo, virtual public RAMInfo {};
 
class PCInfo: public HDDInfo, public RAMInfo, public CPUInfo, public VideoAdapterInfo {};
Но опять же структура наследования явно не продумана. Где-то нужно наследование, где-то агрегация.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
16.12.2016, 11:26
Цитата Сообщение от LoSyAsH Посмотреть сообщение
Я правильно понял, что ты имеешь ввиду, что у меня должен быть отдельный класс PC_RAM и VideoAdapter_RAM?
Вообще не совсем. Я объяснял уважаемому JIawliet что по моему мнению от тебя хотят преподаватели.
При наследовании у тебя в результирующем объекте PCInfo будут находиться два подобъекта RAMInfo, JIawliet сказал, что это неверно, а я просто предположил ход мыслей того, кто давал это задание; Расчет был на то, что оперативная память и память видеокарты - это разные объекты, поэтому их должно быть два (это и порождает неоднозначность, но похоже требуется по заданию).

Что касается твоего предположения
Цитата Сообщение от LoSyAsH Посмотреть сообщение
у меня должен быть отдельный класс PC_RAM и VideoAdapter_RAM?
то на мой взгляд это было бы лучшим компромиссным решением, т.к. ты недалеко ушел бы от схемы, которую тебе нарисовали, но и в то же время разрешил проблему неоднозначности. Плюс к этому, в реальном мире, оперативная память видеокарты, естественно, не то же самое, что ОЗУ компьютера.
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
16.12.2016, 11:29
Цитата Сообщение от DrOffset Посмотреть сообщение
JIawliet сказал, что это неверно
наоборот) я согласился, так как это самое логичное объяснение происходящего) хотя на схеме все иначе(
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
16.12.2016, 11:30
Цитата Сообщение от JIawliet Посмотреть сообщение
хотя на схеме все иначе(
Нет, там именно так и нарисовано, иначе откуда бы я взял эту версию?
А про "неверно", ты говорил ранее до этого - я об этом.
0
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
16.12.2016, 11:33  [ТС]
Думаю, обсуждение можно пока приостановить. Позже отпишу, помогло удаление ключа исправить проблему или нет
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.12.2016, 11:35
Цитата Сообщение от LoSyAsH Посмотреть сообщение
при обращении вылетает ошибка
error: ‘A’ is an ambiguous base of ‘C’
http://rextester.com/YKYR43650
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
#include <iostream>
 
template<class T> struct ram 
{ 
    ram(const size_t v): memory(v){}
    size_t memory; 
};
 
struct video : ram<video> 
{
    video(const size_t v): ram<video>(v){}
};
 
struct cpu : ram<cpu> 
{
    cpu(const size_t v): ram<cpu>(v){}    
};
 
struct computer : video, cpu
{
    computer(const size_t memVideo, const size_t memCPU)
        : video(memVideo)
        , cpu(memCPU)
    {}
    
    void print() const 
    { 
        std::cout << "Video RAM .. " << video::memory << " Gb" << std::endl;
        std::cout << "CPU RAM .... " << cpu::memory   << " Gb" << std::endl;
        
        
    }
};
 
int main()
{
    computer pentium(16, 64);
    pentium.print();
}
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
16.12.2016, 11:38
Цитата Сообщение от JIawliet Посмотреть сообщение
хотя на схеме все иначе(
Вот я специально даже обвел красненьким

Если вдруг у кого еще сомнения.
0
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
16.12.2016, 11:38  [ТС]
Неплохая идея. Если ничего не поможет, то реализую RAM как шаблонный класс.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.12.2016, 11:44
Цитата Сообщение от LoSyAsH Посмотреть сообщение
Если ничего не поможет, то реализую RAM как шаблонный класс.
в вашем случае это - единственный способ порешать задачу не выходя за рамки требований.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
16.12.2016, 12:16
LoSyAsH, кстати, предупреждение, может все равно превратиться в ошибку, если неоднозначность будет действительно мешать (а не просто быть). Например если в класс RAMInfo поместить функцию, то вызвать ее через PCInfo будет невозможно.
0
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
16.12.2016, 12:23  [ТС]
а её нельзя будет вызвать через расширение области видимости? VideoAdapter::func()?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
16.12.2016, 12:27
Цитата Сообщение от LoSyAsH Посмотреть сообщение
а её нельзя будет вызвать через расширение области видимости? VideoAdapter::func()?
Можно, а вот функцию для подобъекта RAMInfo, который изображает оперативную память, уже не получится.
Т.к. эта функция одновременно будет и в подобъекте VideoAdapter. В этом и заключается неоднозначность.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2016, 12:27

Компиляция кода
Здраствуйте,есть код на хаскелле,при компиляции через сервис http://codepad.org/ жалуется на 9ую строку(хотя это только начало). ...

Компиляция кода
пытался через консоль скачать следующий модуль &quot;pip install pyinstaller&quot; но выходит ошибки (на фото ниже) гуглил не нашел чего то...

Компиляция кода
Как компилировать код в Python 3.7+?

Компиляция кода
Доброго времени суток. Имеется М-файл с кодом. Суть кода: читаем фото, пропускаем через фильтры, на выходе имеем некую матрицу, в которой...

Компиляция с++ кода на с#
Здравствуйте, такой вопрос: Есть код на с++, который пишется в текстбоксе. Мне нужно его скомпилировать, как это сделать? Может есть...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru