gpt4 book ai didi

c++ - 使用注入(inject)的类名调用成员函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:57 26 4
gpt4 key购买 nike

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}'

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

最佳答案

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

error: expected type-specifier

new 运算符需要紧随其后的是类型名称,而不是构造函数名称。

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

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

关于c++ - 使用注入(inject)的类名调用成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27265155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com