我有一个单例类,定义如下

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/

10-13 00:02