Вам нужно взглянуть на ваши конструкторы и списки инициализации членов. Сложно сказать, не видя код, но происходит то, что у вас есть такой код: -
class my_class : public base1, public base2
{
public:
my_class();
private:
member1 member1_;
member2 member2_;
}
my_class::my_class()
: member2_(...)
, member1_(...)
, base2_(...)
, base1_(...)
{ }
Это выдаст аналогичные предупреждения. Причина в том, что в C ++ конструктор всегда создает базовые классы в порядке, показанном в списке базовых классов (base1, за которым следует base2), затем он создает переменные-члены сверху вниз в определении класса. Это происходит без учета порядка, который вы указываете в списке инициализации вашего члена - этот порядок игнорируется, но если он не соответствует некоторым компиляторам (включая ваш, кажется), предупредит вас об этом.
Кстати, причина, по которой он делает это, заключается в том, что в C ++ существует строгое требование вызова деструкторов в обратном порядке конструкторов, поэтому, если бы он делал вещи в порядке списков инициализации членов, он должен был бы каким-то образом "запомнить" какой конструктор был вызван так, чтобы он мог вызывать деструкторы в правильном порядке. Он этого не делает, а просто всегда использует один и тот же порядок.