类型名称不允许和期望)

type name not allowed and expect )

本文关键字:期望 不允许 类型      更新时间:2023-10-16

嗨,我有以下代码试图让它工作,我一直得到不允许的速度类型名称,并且大约 .x 得到期望(,基本上我想做的是读取"速度"中的 3 D3DXVECTOR3值。我已经制作了一个结构速度并通过了成员,它不起作用,也许我解释错了什么?

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));

首先定义一个名为speedstruct

struct speed{...};  

然后尝试定义一个名为 speedfloat

float speed = ...;

在C++变量名是唯一的,因此代码被拒绝。更改struct的名称或float的名称。

在此函数调用

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));

您似乎不知道这些类型的类型和实例之间的区别。 intfloatspeedD3DXVECTOR3是类型。您可以通过创建这些类型的实例/变量并操作这些变量来使用类型:

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 的变量 float 类型,你不能这样做,因为speed命名一个类型。您还可以尝试直接在类型上访问struct speed的成员,而无需实例。要访问成员,您需要一个实例(实例是实际上将值保存在某个内存位置的东西,该类型仅描述实例的外观以及它可以做什么(。因此,要使用您的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的调用中使用它,并使用它的成员来计算所需的值。