-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

DeviceIDおよびProdReqIDint、であり、でrequest.DeviceIDある場合request.ProdReqIDlong 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パラメーターをからintに変更してから次の手順を実行することで問題を修正しましたLONG64

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