-1

我试过这个:

request.DeviceID = (long long int *)&(DeviceID);
request.ProdReqID = (long long int *)&(ProdReqID);

但是当我这样做时:

cout << "DEVICE ID: " << request.DeviceID << " " << request.ProdReqID << " " << endl;
cout << "DEVICE ID: " << &request.DeviceID << " " << &request.ProdReqID << " " << endl;

我得到:

设备 ID:0xfffa9bf0 0xfffa9bf4 设备 ID:0xfffa9bd4 0xfffa9bd8

我真的不知道这是否有效。我希望看到实际数字的打印...

4

3 回答 3

3

如果DeviceIDand ProdReqIDis int, and request.DeviceIDand request.ProdReqIDis long long int, 那么做:

request.DeviceID = (long long int)DeviceID;
request.ProdReqID = (long long int)ProdReqID;

使用演员甚至:

request.DeviceID = DeviceID;
request.ProdReqID = ProdReqID;

使用类型提升。

于 2012-09-21T16:41:38.353 回答
1

你没有说这些类型实际上是什么,但假设int DeviceIDlong long int Request::DeviceID(正如原始标题所暗示的,在它被改变之前),转换是隐式发生的:

request.DeviceID = DeviceID;

但是,从您的代码中可以看出它request.DeviceID是一个指针。这几乎肯定不是你想要的,但如果是,那么它需要一个正确类型的值来指向,例如

long long int DeviceIDValue = DeviceID;
request.DeviceID = &DeviceIDValue;

您可以通过取消引用指针来访问该值:

cout << "DEVICE ID: " << *request.DeviceID << " " << *request.ProdReqID << " " << endl;

代码中的狡猾转换只是绕过类型检查并创建指向错误类型的无效指针。如果(如您所愿)您使用 C++ 风格的演员表而不是完全邪恶的 C 风格演员表,那么您必须编写reinterpret_cast,这应该敲响一个非常响亮的警钟——这种转换是无效的。

于 2012-09-21T16:44:57.737 回答
0

我通过将 DeviceID 和 ProdReqID 参数从intto更改为LONG64然后执行以下操作来解决此问题:

request.DeviceID = &(DeviceID);
request.ProdReqID = &(ProdReqID);
于 2012-09-21T19:34:55.487 回答