C++ C++;:在没有对象实例的情况下调用非静态成员函数
我正在查看Godot游戏引擎的源代码,发现了以下内容(为了简单起见,省略了一些内容): 为什么调用方法C++ C++;:在没有对象实例的情况下调用非静态成员函数,c++,open-source,C++,Open Source,我正在查看Godot游戏引擎的源代码,发现了以下内容(为了简单起见,省略了一些内容): 为什么调用方法get_size()而不先实例化Control类型的对象,然后调用其成员函数是合法的?我试图在自己的文件中重新创建此行为,但它不会像我通常预期的那样编译: class Control { public: double get_size() const; }; double Control::get_size() const { return 5.0; } class Popu
get_size()
而不先实例化Control
类型的对象,然后调用其成员函数是合法的?我试图在自己的文件中重新创建此行为,但它不会像我通常预期的那样编译:
class Control
{
public:
double get_size() const;
};
double Control::get_size() const
{
return 5.0;
}
class PopupMenu
{
public:
int _get_mouse_over(double d) const;
};
int PopupMenu::_get_mouse_over(double d) const
{
return d > get_size(); // compile error, as expected
}
是什么导致了这种行为?如果您感兴趣,可以在以下网址找到这些方法的实际源代码:
第110行:
第1770行:
我搜索了这个问题,发现其中一个问题没有回答我的问题,因为在他的例子中,实际上有一个实例是通过调用该方法的(这是一种不同的语言)。因为
弹出菜单
源于控件
,PopupMenu
的每个实例也是控件的一个实例
当PopupMenu
的成员函数调用get\u size()
时,它会在自身上调用控件的get\u size()
函数
或者换句话说,PopupMenu
有一个get\u size()
函数,因为它是从控件派生的
在您的娱乐中,PopupMenu
不是从控件派生的,因此这不适用。PopupMenu是从控件派生的吗?@immibis是的,它是<代码>类弹出:公共控件
,类弹出菜单:公共弹出
class Control
{
public:
double get_size() const;
};
double Control::get_size() const
{
return 5.0;
}
class PopupMenu
{
public:
int _get_mouse_over(double d) const;
};
int PopupMenu::_get_mouse_over(double d) const
{
return d > get_size(); // compile error, as expected
}