Qt5:如何将QPointer与Forward Declared类一起使用

时间:2014-08-21 13:48:51

标签: c++ qt qt5 forward-declaration

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

背景 正如几乎所有关于现代C ++的文本所建议的那样,人们应该避免使用 naked 指针并使用 smart 指针。在Qt工具包中有一组可用的智能指针,在这种情况下我特别感兴趣:QWeakPointer(Qt 4)或QPointer(Qt 5),它可以自由地与一个指针,并在删除相应对象(派生自NULL)时设置为QObject,从而有助于防止所有常见的悬空指针问题。然而,QPointer指向的对象是QObject派生类型的要求会阻止使用前向声明的类。

问题:我如何将QPointer - 类型变量与类标题中的前向声明类与前向声明类型组合在一起?

如何避免为我要使用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
    ]

1 个答案:

答案 0 :(得分:4)

您确定已正确包含QPointer吗?这似乎就像编译器无法找到QPointer而不是MyQWidget。