我仍在研究我的Logger,我喜欢Singleton的想法,但我的Logger派生了frd QDialog,因此我想在我第一次调用它时处理我的Parent QWidget * MainWindow指针:
class Logger : public QDialog {
Q_OBJECT
private:
explicit Logger(QWidget* parent = 0);
public:
static Logger& firstInstance(QWidget* parent = 0) {
static Logger theInstance(parent);
return theInstance;
}
static Logger& instance() {
return theInstance;
}
//..
}
所以我会从我的MainWindow打电话给Logger::firstInstance(this);
。和来自其他地方的Logger :: instance()。但我的编译器嘲笑:
第二个错误:未在此范围内声明'theInstance': 返回实例;
instance()
方法中的。
答案 0 :(得分:1)
你实际上应该只从firstInstance
拨打instance
,因为你在firstInstance
中有静态变量,它只会在第一次调用时被初始化,然后只返回已初始化的变量。
static Logger& instance() {
return firstInstance();
}
但实际上,公共接口中的函数firstInstance
是个坏主意,可能最好将其设为私有并声明MainWindow
朋友类。