我试过了:
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
我真的不知道这是否有效。我希望看到实际数字的打印...
答案 0 :(得分:3)
如果DeviceID
和ProdReqID
为int
,request.DeviceID
和request.ProdReqID
为long long int
,请执行以下操作:
request.DeviceID = (long long int)DeviceID;
request.ProdReqID = (long long int)ProdReqID;
使用演员表演甚至:
request.DeviceID = DeviceID;
request.ProdReqID = ProdReqID;
使用类型促销。
答案 1 :(得分:1)
您没有说明实际上是什么类型,但假设int DeviceID
和long 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
,这应该响起一个非常响亮的警钟 - 转换无效。
答案 2 :(得分:0)
我通过将DeviceID和ProdReqID参数从int
更改为LONG64
然后执行以下操作来修复此问题:
request.DeviceID = &(DeviceID);
request.ProdReqID = &(ProdReqID);