c++ - typedef 单例作为成员变量

标签 c++ c++11 singleton typedef

尝试访问下面的成员变量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::getInstancec 指向的对象上.在基类上调用覆盖(或隐藏)的成员函数时,或者消除从多个基类继承的成员函数的歧义时,可以使用此语法:

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/

相关文章:

c++ - 如何在不调用现有对象的析构函数的情况下在 vector 中添加和初始化对象?

c++ - C++中初始化数组容器的方法

c++ - 方法返回容器用于基于范围的 for 循环

design-patterns - 你能在任何需要单例的地方使用依赖注入(inject)吗?

ruby-on-rails - 开发重新加载后 Rails 单例变空

c++ - 错误 : typedef redefinition with different types

c++ - 铛 libTooling : How to find which header an AST item came out of?

c++ - 使用 boost::property_tree 枚举从 xml 到 c++ 程序的输入

java - Web 应用程序中如何处理单例?

c++ vtk xml writer (vtkImageData) - 同一个vti文件中的多个变量