首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt5:如何在前向声明类中使用QPointer

Qt5:如何在前向声明类中使用QPointer
EN

Stack Overflow用户
提问于 2014-08-21 13:48:51
回答 1查看 1.9K关注 0票数 2

问题:用智能QPointers替换裸指针,并与前向声明的类一起使用它们。

背景:根据现代C++上几乎所有文本的建议,人们应该避免使用裸指针,而应该使用智能指针。在Qt工具包中,有一组可用的智能指针,其中一个是我在本例中特别感兴趣的指针:QWeakPointer (Qt 4)或QPointer (Qt 5),据说它可以与裸露指针自由交换,并在删除相关对象(从QObject派生)时设置为NULL,从而帮助防止太常见的悬空指针问题。然而,QPointer所指向的对象必须是QObject-derived类型的要求阻止了前向声明类的使用。

问题:如何将QPointer**-type变量与具有前向声明类型的类头中的前向声明类组合起来?**

如何避免包含要对其使用QPointer**?**的对象的整个头文件?

示例:

代码语言:javascript
复制
#pragma once
#include <QObject>
#include <QPointer>

class MyQWidget; // Forward-declared class

class SomeClass {
   QPointer<MyQWidget> m_myWidget;
};

注意:,我已经读过像这样的一篇文章:In C++, is it possible to forward declare a class as inheriting from another class?。在我的问题中,我正在寻找特定于Qt的方法来克服这个限制(或者更好的设计特性),如果有的话。

编辑:我的主要编译器是MSVC 2010,我得到的错误是

代码语言:javascript
复制
error C2079: 'MainWindow::m_test' uses undefined class 'QPointer<T>'
    with
    [
        T=MyQWidget
    ]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 14:59:03

您确定您已经正确地包含了QPointer吗?这似乎是编译器找不到QPointer而不是MyQWidget。

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

https://stackoverflow.com/questions/25428056

复制
相关文章

相似问题

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