使用注入的类名来调用成员函数

时间:2014-12-03 06:33:54

标签: c++

Calling a static method by repeating the object name,我看到以下代码。

struct foo {
  static foo& instance() {
    static foo f;
    return f;
  }
};

foo::foo::foo::instance();

工作正常。

但是,在expected type-specifier and cannot convert ‘int*’ in initialization,我看到以下代码:

namespace ASP
{
    class ASp
    {
        public:
            ASp();
            ASp(FILE* fp);  
    };
}

但是

using namespace ASP;
ASp* asp = new ASp::ASp();

无法在g ++ 4.8.2和Visual Studio 2010中编译。

g ++报告:

error: expected type-specifier
 ASp* asp = new ASp::ASp();

Visual Studio报告:

error C2061: syntax error : identifier '{ctor}'

为什么注入的类名适用于第一种情况而不适用于第二种情况?

1 个答案:

答案 0 :(得分:4)

我认为GCC提供了一个相当有用的提示:

error: expected type-specifier

new运算符之后会立即需要类型名称,而不是构造函数名称。

表达式ASp::ASp可以引用类型的构造函数或类型本身。但是,C ++有关于如何解决这种歧义的规则:在您的情况下,它默认为构造函数,而不是类型。为了强制将其解析为类型,您必须在其前面添加typename(感谢ooga!),structclass(或使用{{1}访问其成员)在你的第一个例子中):

::