2014-03-27 39 views
0

试图访问成员变量S下方,导致以下错误:的typedef单作为成员变量

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(); 
} 

我没想到这种错误。我究竟做错了什么?

+0

这可以说是你做错了主要的是使用首先是一个单身人士。 –

+0

这是一个综合示例。这不是我写的代码,而是我必须使用的代码。 – wizurd

回答

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 
+0

即使'cl :: s'也不可访问。 – ach

+0

typedef需要移动到公共以及以这种方式访问​​。 – capturesteve

+0

更不用说'我'是未定义的,但这是主要问题。休息是有点微不足道的。 – luk32