2012-02-22 5 views
1

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

вызов вызывающей функции,

Я приводил пример.

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

    public: 

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

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

+5

гораздо более важный вопрос - почему вы выходите из 'std :: vector'. Этот класс не предназначен для наследования. – Naveen

+0

, вы можете попробовать/подкласс [QListWidget] (http://developer.qt.nokia.com/doc/qt-4.8/QListWidget.html). –

ответ

4

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

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

0

В общем случае вы можете заставить его быть один или другой с 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.

Смежные вопросы