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从"单位**"转换为"单位"
对我来说还不清楚,为什么第二个版本引用了一个对象指针的指针,而不是一个对象.另外,我应该如何以正确的方式编写函数调用?
“我不清楚为什么第二个版本引用对象指针的指针,而不是对象。”
当&出现这样的情况时,它的意思是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)
这意味着该函数将接收一个指向单位的指针。