问题:用智能QPointers替换裸指针,并与前向声明的类一起使用它们。
背景:根据现代C++上几乎所有文本的建议,人们应该避免使用裸指针,而应该使用智能指针。在Qt工具包中,有一组可用的智能指针,其中一个是我在本例中特别感兴趣的指针:QWeakPointer (Qt 4)或QPointer (Qt 5),据说它可以与裸露指针自由交换,并在删除相关对象(从QObject派生)时设置为NULL,从而帮助防止太常见的悬空指针问题。然而,QPointer所指向的对象必须是QObject-derived类型的要求阻止了前向声明类的使用。
问题:如何将QPointer**-type变量与具有前向声明类型的类头中的前向声明类组合起来?**
或
如何避免包含要对其使用QPointer**?**的对象的整个头文件?
示例:
#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,我得到的错误是
error C2079: 'MainWindow::m_test' uses undefined class 'QPointer<T>'
with
[
T=MyQWidget
]发布于 2014-08-21 14:59:03
您确定您已经正确地包含了QPointer吗?这似乎是编译器找不到QPointer而不是MyQWidget。
https://stackoverflow.com/questions/25428056
复制相似问题