指向 class 实例的指针
Pointer to the class instance
我在命名空间中插入了一个 class:
namespace CPGL
{
class Application;
}
class Application
{
public:
Application()
{
...
}
};
当我尝试创建一个这样的指针时 class:
CPGL::Application application();
CPGL::Application* app = &application;
奇怪而神秘的事情开始发生了。这是编译日志:
error: cannot convert ‘CPGL::Application (*)()’ to ‘CPGL::Application*’ in initialization
CPGL::Application* app = &application;
问题是一个link到class如何变成指向这个class的构造函数的指针,如何解决?
CPGL::Application application();
是函数声明,因此编译器诊断显示 CPGL::Application (*)()
、
CPGL::Application application();
CPGL::Application* app = &application;
表达式&application
在这里是一个函数指针。这个错误有时(错误地)被称为 The most vexing parse
您可能想要的是
CPGL::Application application;
CPGL::Application* app = &application;
另请注意,您的命名空间声明了一个 class Application
,但它是在命名空间之外定义的。这可能是也可能不是问题中的错字。
我不想将此描述为最令人烦恼的解析,因为没有语法规则可以合理地允许将其作为对构造函数的调用。 type name();
是一个函数声明,句点。然而 A a(object of type B)
是调用构造函数 A::A(B b)
的正确方法。所以认为 A a(B())
创建一个 B 类型的对象作为 A ctor 的参数是合理的。编译器将其解析为一种类型。这在链接的 SO 答案中进行了讨论。
我在命名空间中插入了一个 class:
namespace CPGL
{
class Application;
}
class Application
{
public:
Application()
{
...
}
};
当我尝试创建一个这样的指针时 class:
CPGL::Application application();
CPGL::Application* app = &application;
奇怪而神秘的事情开始发生了。这是编译日志:
error: cannot convert ‘CPGL::Application (*)()’ to ‘CPGL::Application*’ in initialization
CPGL::Application* app = &application;
问题是一个link到class如何变成指向这个class的构造函数的指针,如何解决?
CPGL::Application application();
是函数声明,因此编译器诊断显示 CPGL::Application (*)()
、
CPGL::Application application();
CPGL::Application* app = &application;
表达式&application
在这里是一个函数指针。这个错误有时(错误地)被称为 The most vexing parse
您可能想要的是
CPGL::Application application;
CPGL::Application* app = &application;
另请注意,您的命名空间声明了一个 class Application
,但它是在命名空间之外定义的。这可能是也可能不是问题中的错字。
我不想将此描述为最令人烦恼的解析,因为没有语法规则可以合理地允许将其作为对构造函数的调用。 type name();
是一个函数声明,句点。然而 A a(object of type B)
是调用构造函数 A::A(B b)
的正确方法。所以认为 A a(B())
创建一个 B 类型的对象作为 A ctor 的参数是合理的。编译器将其解析为一种类型。这在链接的 SO 答案中进行了讨论。