Задать вопрос

Как избавиться от warning C4250: inherits via dominance?

Уважаемые читатели habrahabr,

помогите мне, пожалуйста, со следующей проблемой.


Пусть у нас есть два интерфейса:
class IA
{
public:
	virtual int FuncA() = 0;
};

class ISuperA : virtual public IA
{
public:
	virtual int FuncSuperA() = 0;
};



Мы делаем какую-то реализацию для каждого из них:
class A1 : virtual public IA
{
public:
	virtual int FuncA() { return 1; }
};

class AIncrement: virtual public ISuperA
{
public:
	virtual int FuncSuperA() { return (FuncA() + 1); }
};



Потом создаем класс, являющегося наследником обоих реализаций интерфейсов:
class A1Increment: virtual public AIncrement, virtual public A1
{
};

int main()
{
	A1Increment a;
	cout << "test: " << a.FuncSuperA() << endl;
}



В этом случае при компиляции в Microsoft Visual Studio 2010 возникает следующий warning:
warning C4250: 'A1Increment': inherits 'A1::A1::FuncA' via dominance



Возникает вопрос: есть ли возможность избавиться от этого warningа?

Если при такой реализации это невозможно, то возможно ли использовать какую-нибудь другую форму наследования\интерфейса?
  • Вопрос задан
  • 4483 просмотра
Подписаться 4 Оценить Комментировать
Ответ пользователя Ramires К ответам на вопрос (4)
Ramires
@Ramires
О предупреждении раз и два. Убрать можно с помощью warning pragma.
GCC и Clang никакого предупреждения не показали.
Ответ написан