множественное наследование, неоднозначная функция - PullRequest
1 голос
/ 22 февраля 2012

Я пишу приложение, в котором класс наследует от класса виджетов vector и qt, а также в одном из вопросов, когда я вызываю функцию, так как компилятор this-> size () выдает ошибку

неоднозначный вызов функции,

я привожу пример.

class A:public std::vector<int>,public Qwidget
{
    private :

    public:

      int getSize()
        { return this->size(); }
}

я знаю, что проблема из-за вектора и q

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

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

Однако то, что вы делаете, ужасно зло.std::vector не предназначен для наследования (и ваш код никогда не будет компилироваться: это шаблон).Если вам действительно нужен контейнер последовательности с сигналом / слот-шенинганом, вы должны использовать QList .

0 голосов
/ 22 февраля 2012

В общем случае вы можете заставить его быть одним или другим с помощью using, чтобы сказать, что:

#include <iostream>

struct A {
  void foo() { std::cout << "A\n"; }
};

struct B {
  void foo() { std::cout << "B\n"; }
};

struct C : A, B {
  using A::foo;
  void bar() {
    foo();
  }
};

int main() {
  C c;
  c.bar();
}

Либо внутри класса (применяется ко всем функциям-членам), либо внутри определенной функции.

Однако наследование от std::vector в любом случае вызывает проблемы, поэтому в этом случае решением будет просто не наследовать от vector.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...