通过对象指针调用对象函数

Zol*_*idt 5 c++ arrays pointers object

我的程序包含一个类,这里​​是它的简化形式:

Units.h:

#define fullwidth 200
#define fullheight 200

class Units
{
public:

[...]

void MovingUp(Units* Detector[fullwidth][fullheight], Units Self);
[...]
}
Run Code Online (Sandbox Code Playgroud)

它定义了一个函数,它接受两个参数作为输入:"Units"对象的对象指针数组,以及一个特殊选择的"Units"对象.

这是主要部分:

#include "Units.h"

[...]

int i,j;
Units* DetectorField[fullwidth][fullheight];
Units Examples[20];

for (j=0;j<fullheight;j++)
{
    for (i=0;i<fullwidth;i++)
    {
        DetectorField[i][j] = NULL;
    }
}
Run Code Online (Sandbox Code Playgroud)

它创建"单元"对象指针数组,这对于"单元"中的函数是必需的,并且在开始时将所有这些值设置为NULL.

之后,我尝试通过一个随机选择的指针调用对象的函数.显然,如果指针被引用为NULL,则调用是不可能的,但是在我运行程序之前Visual C++显示错误.

DetectorField[12][12]->MovingUp(DetectorField,DetectorField[12][12]);
Run Code Online (Sandbox Code Playgroud)

对于这个版本,Visual C++在编译后写入:无法将参数2从"Units*"转换为"Units" - 当然,因为DetectorField它本身就是一个指针数组.然后我尝试引用它指向的对象,这样:

DetectorField[12][12]->MovingUp(DetectorField,&DetectorField[12][12]);
Run Code Online (Sandbox Code Playgroud)

编译后MSVC写入:无法将参数2从"单位**"转换为"单位"

对我来说还不清楚,为什么第二个版本引用了一个对象指针的指针,而不是一个对象.另外,我应该如何以正确的方式编写函数调用?

Ran*_*dan 1

“我不清楚为什么第二个版本引用对象指针的指针,而不是对象。”

&出现这样的情况时,它的意思是the address of

“另外,我应该如何以正确的方式编写函数调用?”

你应该做什么或者这样称呼它:

DetectorField[12][12]->MovingUp(DetectorField,*DetectorField[12][12]);
                                              ^
Run Code Online (Sandbox Code Playgroud)

这意味着 DetectorField[12][12] 指向的值(因为它是一个指针数组)。

或者将函数减速度更改为:

void MovingUp(Units* Detector[fullwidth][fullheight], Units* Self);
                                                           ^
Run Code Online (Sandbox Code Playgroud)

这意味着该函数将接收一个指向单位的指针。