您好,我有以下代码试图让它工作,我一直得到类型名称不允许速度和.x得到预期),基本上我想要做的是读取内部的3 D3DXVECTOR3值"速度&#34 ;.我已经制定了结构速度并传递给成员,它不起作用,也许我解释错了什么?
struct velocity
{
float x, y, z;
};
ReadProcessMemory(pHandle,
reinterpret_cast<void*>(pPlayerSpeed + 0x000),
&speed,
sizeof(D3DXVECTOR3),
nullptr);
float speed = sqrt((speed.x * speed.x) +
(speed.y * speed.y) +
(speed.z * speed.z));
答案 0 :(得分:0)
首先定义名为struct
speed
struct speed{...};
然后尝试定义名为float
speed
float speed = ...;
在C ++中,变量名称是唯一的,因此代码被拒绝。更改struct
的名称或float
的名称。
答案 1 :(得分:0)
在此函数调用中
ReadProcessMemory(pHandle,
reinterpret_cast<void*>(pPlayerSpeed + 0x000),
&speed,
sizeof(D3DXVECTOR3),
nullptr);
编译器将表达式speed
中的名称&speed
视为类型struct speed
的名称。您必须指定一个对象(我认为这种类型)作为参数而不是类型名称本身。
同样不好的做法是将float类型的对象命名为struct speed
的名称。
最好重命名对象或在此声明中使用详细的结构名称。
float speed = sqrt((( struct speed).x * (struct speed).x) +
((struct speed).y * (struct speed).y) +
((struct speed).z * (struct speed).z));
答案 2 :(得分:0)
您似乎不知道这些类型的类型和实例之间的区别。
int
,float
,speed
,D3DXVECTOR3
是类型。您可以通过创建这些类型的实例/变量并操纵这些变量来使用类型:
int someInt = 0;
float someFloatVariable = 0.0;
speed playerSpeed = { 0.0, 0.0, 0.0 };
D3DXVECTOR3 myVect;
当调用函数时,必须为其提供参数,这些参数是函数所期望的正确类型的实例。因此,您对ReadProcessMemory
的致电在这方面是错误的。您可以尝试这样的事情:
speed playerSpeed;
ReadProcessMemory(pHandle,
reinterpret_cast<void*>(pPlayerSpeed + 0x000),
&playerSpeed, // NOTE variable name, NOT type name
sizeof(D3DXVECTOR3),
nullptr);
但这也很可能是错误的,您可能想要阅读D3DXVECTOR3
向量,而不是您自己定义的speed
实例,因此您可能希望尝试这样:
D3DXVECTOR3 playerSpeedVect;
ReadProcessMemory(pHandle,
reinterpret_cast<void*>(pPlayerSpeedVect + 0x000),
&playerSpeedVect, // NOTE variable name, NOT type name
sizeof(D3DXVECTOR3),
nullptr);
现在到第二行代码:
float speed = sqrt((speed.x * speed.x) +
(speed.y * speed.y) +
(speed.z * speed.z));
所以......你正试图定义一个名为speed of float类型的变量,你不能这样做,因为speed
命名一个类型。您还尝试直接在类型上访问struct speed
的成员,而不是实例。要访问成员,您需要一个实例(实例是 thing 实际上在某个内存位置保留一个值,该类型仅描述实例的外观以及它可以执行的操作)。
因此,要使用speed
结构,您可以执行以下操作:
speed playerSpeed;
playerSpeed.x = 1.2;
playerSpeed.y = 2.0;
playerSpeed.z = 2.5;
float computedValue = sqrt(playerSpeed.x * playerSpeed.y + playerSpeed.z);
现在回到你的代码,完全删除你的速度结构并使用D3DXVECTOR3
可能会更好。因此,声明一个D3DXVECTOR3
类型的变量,在上面的ReadProcessMemory
调用中使用它,并使用它的成员来计算你需要的值。