我创建了一个单例类,并试图在其他类中访问该类但却出错 “无法访问私人会员”
Setupconfig
是我的单例类,我试图在其他具有QMainWindow
以下是错误消息:
错误'Setupconfig :: Setupconfig':无法访问私有成员 在“Setupconfig”类中声明
Setupconfig.h
static Setupconfig *buiderObj()
{
static Setupconfig *_setupObj= new Setupconfig();
return _setupObj;
}
private:
Setupconfig();
//////////////////////////////////////
EasyBudget.h
class EasyBudget : public QMainWindow, public Ui::EasyBudgetClass, public Setupconfig
{
Q_OBJECT
public:
Setupconfig *setupObj;
}
//////////////////////////////////////
EasyBudget.cpp
EasyBudget::EasyBudget(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent,Qt::FramelessWindowHint)
{
setupObj=Setupconfig::buiderObj();
}
答案 0 :(得分:2)
您应该在源文件中声明静态成员,而不是在头文件中,无论您是否使用静态类成员或静态函数成员方法。如果instance()函数是公共成员,那么您的基本appoach应该有效:
//setupconfig.h
class Setupconfig
{
public:
static Setupconfig* instance();
private:
SetupConfig();
};
//setupconfig.cpp
static Setupconfig* SetupConfig::instance()
{
static Setupconfig* _setupObj= new Setupconfig();
return _setupObj;
}
SetupConfig::SetupConfig()
{
//....
}
也可以使用类成员方法
//setupconfig.h
class Setupconfig
{
public:
static Setupconfig* instance();
private:
SetupConfig();
static Setupconfig* _setupObj;
};
//setupconfig.cpp
Setupconfig* Setupconfig::_setupObj = 0;
static Setupconfig* SetupConfig::instance()
{
if (_setupObj == 0) {
_setupObj = new Setupconfig;
}
return _setupObj;
}
SetupConfig::SetupConfig()
{
//....
}
答案 1 :(得分:0)
试试这个
public:
static Setupconfig *buiderObj()
{
if(*_setupObj; != null)
{
_setupObj= new Setupconfig();
}
return _setupObj;
}
public:
Setupconfig(){}
private:
Setupconfig *_setupObj;
答案 2 :(得分:0)
为什么要从单例类“SetupConfig”中派生出“EasyBudget”?
删除该部分以解决您的问题。
EasyBudget.h
class EasyBudget : public QMainWindow, public Ui::EasyBudgetClass
{......
答案 3 :(得分:0)
这种方法存在一些缺点,复制构造函数和赋值构造函数(默认情况下由C ++编译器生成)将复制所谓的单例类(此处名称:SetupConfig)。您还应该将这些拖曳构造函数声明为私有。