2012-02-22 117 views
1

我写其中类从向量和qt widget类以及和在的一个问题继承当我调用一个函数为这个 - 应用>尺寸()编译器引发错误多重继承ambigious功能

ambigious函数调用,

我举个例子。

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

    public: 

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

我知道这个问题是因为这两个向量和Q

+5

更重要的问题是为什么你从'std :: vector'派生。这个类不是为继承而设计的。 – Naveen 2012-02-22 09:56:08

+0

您可能想尝试/子类[QListWidget](http://developer.qt.nokia.com/doc/qt-4.8/QListWidget.html)。 – 2012-02-22 10:03:26

回答

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继承。