我有一个单例类,定义如下
class myData {
private:
myData (void); // singleton class.
// Copy and assignment is prohibted.
myData (const myData &);
myData & operator=(const myData &);
static myData* s_pInstance;
public:
~myData (void);
static const myData & Instance();
static void Terminate();
void myFunc() { cout << "my function..." ;}
};
//在 cpp 文件中。
myData* myData::s_pInstance(NULL);
myData::myData(){}
myData::~myData()
{
s_pInstance = NULL;
}
const myData& myData::Instance()
{
if (s_pInstance == NULL)
{
s_pInstance = new myData();
}
return *(s_pInstance); // want to avoid pointer as user may deallocate it, so i used const referense
}
void main() {
(myData::Instance()).myFunc();
}
我收到以下错误
错误 C2662:“myData::myFunc”:无法将“this”指针从“const myData”转换为“myData&”
如何避免上述问题并从返回常量引用的实例函数调用函数?
谢谢!
最佳答案
您希望将 func()
声明为常量成员函数,以便编译器知道它不会违反 instance()
函数的 const 返回值。
您也可以让 instance()
函数返回一个与 const
相关的“常规”引用。
所以要么转:void myFunc()
到 void myFunc() const
或转:const myData& myData::Instance()
到 myData& myData::Instance()
关于C++ 单例类返回常量引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6772192/