我有一个QT对话框,我需要从程序中的任何位置访问。基本上我需要做的就是在我的程序中的某个地方创建一个静态实例,比如:
'''注意''':这只是我想要做的一个例子,而不是实际的代码(这里发布的时间太长了)
class Core
{
public:
static DialogType *MyDialog;
};
DialogType *Core::MyDialog = NULL;
// later in main.cpp
int main(int argc, char *argv[])
{
try
{
Core::Init();
QApplication a(argc, argv);
Core::MyDialog = new DialogType();
...
然而,尽管这适用于任何其他类型,但它不适用于从QDialog继承的类。编译器只返回:DialogType没有命名一个类型(是的,我做#include那个带有DialogType声明的.h文件)
我做错了什么?为什么QT不允许这样做?如何才能在程序的任何位置从任何类访问我的对话框的单个实例?
答案 0 :(得分:2)
如果你确实只需要一个单独的,总是可用的特定类的实例,那么你可以用Singleton模式构建它,这样它就可以创建一个指针并返回它,或者只是在它被创建时返回一个指针。单身人士经常被推荐,因为他们有很多错误,但是对于这些问题,它可能比设置QDialog
继承类的静态引用更容易。
答案 1 :(得分:2)
如果您收到编译器不知道您正在使用的类型的错误,则必须插入前向声明,或#include
包含前向声明或定义的头文件。< / p>
如果您的成员类型是指针或引用,则前向声明就足够了,但如果它是任何其他ADT,则需要#include
。
在您发布的代码中,您可以:
Core.h:
class DialogType; // forward declaration.
class Core
{
public:
static DialogType *MyDialog;
};
在您的源文件中,您可以拥有:
Core.cpp:
#include "Core.h"
#include "DialogType.h"
DialogType *Core::MyDialog = new DialogType();