类型名称不允许和期望)
type name not allowed and expect )
嗨,我有以下代码试图让它工作,我一直得到不允许的速度类型名称,并且大约 .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));
首先定义一个名为speed
的struct
struct speed{...};
然后尝试定义一个名为 speed
的float
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));
您似乎不知道这些类型的类型和实例之间的区别。 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 的变量 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
的调用中使用它,并使用它的成员来计算所需的值。
- 为什么 Clang 不允许"and"作为函数名称?
- 不允许在向量中添加更多元素
- std::带有自定义缓冲区的 iostream 不允许我写入
- Visual Studio 2017 不允许我创建 C++ 专用模板
- 返回时不允许隐式转换
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 为什么 c++ 不允许(自动)强制转换?
- 为什么 c++11 不允许使用自动
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 为什么不允许使用可变长度数组作为向量元素?
- 余数除法和不允许除以零 (c++) 时遇到问题
- C++从外部类继承的嵌套类;不允许使用不完整的类型
- 在 c++ 中三元运算符中不允许继续(关键字)吗?
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?
- 错误:在第 6 行'{'标记之前,此处不允许使用函数定义
- 不允许在类定义之外重写
- 不允许运算符 const 参数调用 const 成员函数
- E0322:不允许使用抽象类类型 " " 的对象
- error dllimport 函数的定义不允许在一个特定的联合中,而其他类、结构和联合将按预期导出
- 类型名称不允许和期望)