尝试访问下面的成员变量s,导致如下错误:
error: 'cl::s {aka singleton}' is not a base of 'cl'
class singleton
{
public:
static singleton* getInstance()
{
static singleton* ptr{nullptr};
if(nullptr==ptr)
{
ptr=new singleton;
}
return ptr;
}
private:
int m_var;
};
class cl
{
public:
typedef singleton s;
};
int main()
{
cl* c;
c->s::getInstance();
}
我没想到会出现这种错误。我做错了什么?
最佳答案
您不能通过实例访问类型名称。写:
cl::s::getInstance();
C++ 正在解释 c->s::getInstance()
作为尝试调用 s::getInstance
在 c
指向的对象上.在基类上调用覆盖(或隐藏)的成员函数时,或者消除从多个基类继承的成员函数的歧义时,可以使用此语法:
struct A { void foo(); };
struct B: A { void foo(); };
B b;
b.foo(); // calls B::foo
b.A::foo(); // calls A::foo
关于c++ - typedef 单例作为成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22692214/