在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}'
为什么注入的类名适用于第一种情况而不适用于第二种情况?
答案 0 :(得分:4)
我认为GCC提供了一个相当有用的提示:
error: expected type-specifier
new
运算符之后会立即需要类型名称,而不是构造函数名称。
表达式ASp::ASp
可以引用类型的构造函数或类型本身。但是,C ++有关于如何解决这种歧义的规则:在您的情况下,它默认为构造函数,而不是类型。为了强制将其解析为类型,您必须在其前面添加typename
(感谢ooga!),struct
或class
(或使用{{1}访问其成员)在你的第一个例子中):
::