typedef singleton作为成员变量

时间:2014-03-27 15:30:00

标签: c++ c++11 singleton typedef

尝试访问下面的成员变量s会导致以下错误:

  

错误:' cl :: s {aka singleton}'不是' 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();
}

我没想到会出现这种错误。我做错了什么?

1 个答案:

答案 0 :(得分:5)

您无法通过实例访问类型名称。写:

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