首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QSharedDataPointer多重继承菱形图案?

Qt QSharedDataPointer多重继承菱形图案?
EN

Stack Overflow用户
提问于 2012-11-02 11:17:45
回答 1查看 707关注 0票数 0

我的应用程序的.h文件中定义了两个类

代码语言:javascript
复制
class GroupElement : public QSharedData
{
public:
    int Id;
    int GroupIndex;
    QString Title;
    QSharedDataPointer<AccessDescriptor> pAccessDescriptor;
    QString Owner;
};

class Class2 : public GroupElement
{
public:
    QSharedDataPointer<QList<int> >  Categories;
    // ... many other class members
}

class3 : public QObject
{
  Q_OBJECT
public:
template <class T> QSharedDataPointer<QList<T> > toTQList(QVariant qv );
//...more ....
}

在另一个函数中,我尝试将一个值赋给‘类别’。

代码语言:javascript
复制
QSharedDataPointer<Class2>
Class3::afunction(QVariantMap o)
{

    QSharedDataPointer<Class2> getResult(new Class2());

    getResult-> Categories = toTQList<int>(o["Categories"]);

    // ... more code ...
}

当编译代码时,如图所示,编译器报告"class ...has no member named 'ref'“。这通常表示我需要添加公共QSharedData作为基类。但在本例中,Class2已经从GroupElement派生而来,后者以QSharedData作为基类。如果我将QSharedData作为基类添加到类2中,我会收到警告消息"direct base 'QSharedData‘inaccessible in 'Class2’do to ambiguity.我认为可能遇到了多重继承的‘菱形问题’之一,但我在Qt或c++方面没有足够的经验来知道如何解决它.

我们将非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-02 17:49:18

QSharedDataPointer有一个非常具体的用例,即您希望通过写入时复制行为在实例之间共享数据-即,只要一个实例试图修改它,它就会分离,现在它有了自己的独立副本。要实现这一点,QSharedDataPointer中包含的对象必须继承自QSharedData,它提供了实现这一点所需的引用计数。

所以您的困难与菱形模式无关,您只是不能直接在QSharedDataPointer中存储QList。从你的例子中也看不出这是你真正想要做的。你的设计到底想要达到什么目的?很可能QSharedPointer才是您真正想要的。

我建议您阅读https://www.qt.io/blog/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have,了解有关Qt智能指针类的说明。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13188814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档