Виртуальная функция с одинаковым именем и сигнатурой в двух базовых классах.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Виртуальная функция с одинаковым именем и сигнатурой в двух базовых классах.

Сообщение Anonymous »

Почему MSVC это компилирует, а GCC — нет?

Код: Выделить всё

struct SlotA
{
virtual void func(int value) = 0;
};

struct SlotB
{
virtual void func(int value) = 0;
};

class MultiObserver :
public SlotA,
public SlotB
{
public:

void SlotA::func(int value) override
{
aValue = value;
}

void SlotB::func(int value) override
{
aValue = value;
}

int aValue = 0;
int bValue = 0;
};

void main()
{
MultiObserver mo;

SlotA* a = &mo;
a->func(1);

SlotB* b = &mo;
b->func(2);
}
Ошибки GCC:

Код: Выделить всё

error: cannot define member function ‘{anonymous}::SlotA::func’ within ‘{anonymous}::MultiObserver’
error: cannot define member function ‘{anonymous}::SlotB::func’ within ‘{anonymous}::MultiObserver’
Можно ли это исправить? (Сделайте эту компиляцию так, как если бы SlotA и SlotB имели функции с разными именами, например, func1 и func2).

Подробнее здесь: https://stackoverflow.com/questions/798 ... se-classes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»