通过对象指针调用对象函数
Calling object function through object pointers
我的程序包含一个类,它的简化形式是:
单位.h:
#define fullwidth 200
#define fullheight 200
class Units
{
public:
[...]
void MovingUp(Units* Detector[fullwidth][fullheight], Units Self);
[...]
}
它定义了一个以两个参数作为输入的函数:一个是"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;
}
}
它在"Units"中创建函数所需的"Units(单位)"对象指针数组,并在一开始就将所有这些值设置为NULL。
之后,我尝试通过一个随机选择的指针来调用对象的函数。显然,如果指针被引用到NULL,那么调用是不可能的,但是Visual C++甚至在我运行程序之前就显示了错误。
DetectorField[12][12]->MovingUp(DetectorField,DetectorField[12][12]);
对于此版本,Visual C++在编译后写入:无法将参数2从"Units*"转换为"Units"-当然,因为DetectorField
本身是指针的数组。然后我试着引用它指向的对象,这样:
DetectorField[12][12]->MovingUp(DetectorField,&DetectorField[12][12]);
MSVC在编译后写入:无法将参数2从"Units**"转换为"Units"
我不清楚为什么第二个版本引用的是对象指针的指针,而不是对象。此外,我应该如何以正确的方式编写函数调用?
要使此调用有效:
DetectorField[12][12]->MovingUp(DetectorField, DetectorField[12][12]);
第二个参数必须是Unit *
类型,如:
class Unit
{
// ...
void MovingUp(Units* Detector[fullwidth][fullheight], Units *Self);
};
如果您想保持Unit::MovingUp
原样,请将您的呼叫更改为:
DetectorField[12][12]->MovingUp(DetectorField, *DetectorField[12][12]);
请注意,您在此处按值传递Unit。如果您有从Unit继承的其他类,则存在对象切片的风险。我建议至少将其更改为Unit &
参考。
"我不清楚为什么第二个版本引用了对象指针的指针,而不是指向对象的指针。"
当&
以这种方式出现时,它意味着the address of
。
"此外,我应该如何以正确的方式编写函数调用?"
你应该做的是这样称呼它:
DetectorField[12][12]->MovingUp(DetectorField,*DetectorField[12][12]);
^
这意味着DetectorField[12][12]所指向的值(因为它是指针数组)。
或者将功能分离更改为:
void MovingUp(Units* Detector[fullwidth][fullheight], Units* Self);
^
这意味着该函数将接收一个指向单位的指针。
数组中元素的类型为Units*
。您是这样声明的:Units* Detector[fullwidth][fullheight]
——Units*
的二维数组。Units*
的地址是类型Units**
。
- 如何创建对象函数指针C++映射?
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 如何将对象函数的实例传递给另一个函数
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 将对象函数转换为函数指针
- 非对象函数/类函数C++
- 线程对象函数 C++
- C 将成员对象函数分配给类成员功能
- 使用基本指针调用派生对象函数
- 可以(通过编译器)使用多少个线程来初始化全局对象(函数main之前)
- C++类对象函数
- 对对象::函数的未定义引用
- 无法弄清楚将多个对象函数作为单独的线程调用的语法
- 在提升作用域出口中调用对象函数
- 使用基指针来使用派生对象函数
- 在for_each lambda 中调用对象函数
- C++:: 模板函数 - 从对象函数获取对象的地址
- Qt5 未解析的外部静态元对象函数
- 通过变量使用对象和对象函数