类型名称不允许和期望)

时间:2015-04-02 04:53:15

标签: c++ visual-studio compiler-errors

您好,我有以下代码试图让它工作,我一直得到类型名称不允许速度和.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));

3 个答案:

答案 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)

您似乎不知道这些类型的类型和实例之间的区别。 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 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调用中使用它,并使用它的成员来计算你需要的值。