【问题标题】:Object Instantiation in c ++ with a protected constructor使用受保护的构造函数在 c++ 中进行对象实例化
【发布时间】:2014-03-21 10:43:33
【问题描述】:

我有这个 c++ 类,我想初始化这个类型的对象:

class MyClass

{
public:

   /**
     *  Creates an instance of this class.
     *  @return Pointer to the created object.
     */    
static MyClass * Create ();


protected:
    // Explicit protected Constructor 
    //and Copy-Constructor, use Create() to create an  instance of this object.
    MyClass();

}

为了创建一个实例,我这样做了:

static MyClass * m_object = myClass.Create();

但我收到了这些警告和错误:

   warning C4832: token '.' is illegal after UDT 'MyClass'

   error C2275: 'MyClass' : illegal use of this type as an expression

   error C2228: left of '.Create' must have class/struct/union

如何正确实例化这个对象?

【问题讨论】:

  • myClass 定义在哪里?
  • 这是一个 3D 图形库,该类与我的定义在不同的命名空间中。这 ;已经存在于课程末尾但忘记在此处复制。

标签: c++ visual-studio-2010 instantiation static-constructor


【解决方案1】:

在 C++ 中,静态变量/方法是使用范围解析 (::) 运算符访问的。

将您的代码更改为

static MyClass * m_object = MyClass::Create();

【讨论】:

    【解决方案2】:

    要调用静态成员,您必须使用类名而不是对象名。你的对象实例化应该是这样的。

    MyClass *m_object = MyClass::Create();
    

    【讨论】:

    • 对不起,我错误地回答了java。
    猜你喜欢
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2013-10-06
    • 2012-04-23
    • 2017-01-09
    • 2011-05-30
    • 2016-01-26
    • 2012-06-04
    相关资源
    最近更新 更多