尝试访问下面的成员变量s,导致以下错误:
错误:“ cl :: s {aka单例}”不是“ 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