发新话题
打印

请教关于reinterpret_cast 强制转换问题

请教关于reinterpret_cast 强制转换问题

声明了二个内部完全一样的结构体CHFL和CHFLL ,把CHFL *chf1强制转换成CHAR *test.
4 X' ]' _0 H* V8 O再把test转成*chf2时,G++死活通不过,请问下句该怎么改才好,
* B! J' f& ], {5 F: S9 U
6 w2 b) I" O' V  cCHFLL *chf2=reinterpret_cast<CHFLL *>(&tess);7 C; P0 @" V% y0 u
请问这句该怎么改才好,
9 Z  F5 G4 N  P; E1 O
9 @* |2 k4 ]# k/ R# r' m: S3 N, S! j: Q' q
#include <stdio.h>! H; J* H4 j; x. @- D
#include <stdlib.h>
: ~# f( t5 E6 j5 mtypedef struct1 `  }7 k7 }6 e5 p, r; }% E
{1 v" A) n8 g0 M' \( ?, U
int xc;
. p; A: [2 }' e8 [1 U0 l  r. F; dchar sc;
, K6 R% N% I; b" q* C& \. Q}CHFL;1 O2 A, S3 T$ i' u
typedef struct
7 z! ]" ?: U: y6 e$ n' b* ?{
# w. n0 M! J$ m" `  m' Fint xc1;: [& f9 X! \3 v7 U
char sc1;
- S" a3 u1 w4 Y9 ?: ?}CHFLL;) V1 B1 c/ v4 D+ {! {* N3 M4 R6 [
int main(int argc, char** argv)* [* k0 \& k# }6 U. M$ ^
{
' R+ `! _1 x" e1 E  Y, _CHFL *chfl;% v' ]( x7 v$ |& h# R
chfl->xc=10;
+ G: ?% k) S9 ]# d2 a2 Bchfl->sc='S';4 m) f' W4 u/ X5 [
printf("sssssssss\n");; D, N* C4 `$ y0 [) _
printf("\n%d%s",&chfl->xc,&chfl->sc);
2 `% j3 V5 S' bchar * tess=reinterpret_cast<char *>(&chfl);* u5 P9 m7 r3 ?1 B7 |
printf("\naaa%s",tess);: i& k/ D! Y: H/ L
CHFLL *chf2=reinterpret_cast<CHFLL *>(&tess);
8 S8 m! [4 w. N/ m. B0 R6 `//printf("\n%d ddd %s",chf2->xc1,chf2->sc1);
0 f% e2 n/ c" y$ ^+ X" O   return 0;# @! x1 p1 S# N0 l) k( r; a, [- S- n
}      

TOP

g++ 给了什么错误信息?      
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

不好意思,上面的代码能通过,但是执行的时候 提示“”段错误"
) {/ ~/ X/ R- u
4 L$ b2 g2 S# m/ G当把
! W6 f: U  \* F6 CCHFLL *chf2=reinterpret_cast<CHFLL *>(&tess);
$ u, Z, N( @0 u/ S1 y改成(CHFLL *chf2换成CHFLL chf2)
: X2 Y  {. n/ [+ l* m2 mCHFLL chf2=reinterpret_cast<CHFLL *>(&tess);7 H) ?7 {/ F) l$ s6 d7 |/ @/ t
提示:
& r) O  \3 c9 m[root@localhost src]# g++ -c kfftest.cpp! p6 X( C+ s( l: k" n
kfftest.cpp: In function ‘int main(int, char**)’:; f: B( _+ h/ l& [# l& k6 j# W5 ?. K
kfftest.cpp:26: 错误:no match 为 ‘operator=’ 在 ‘chf2 = (CHFLL*)(& tess)’ 中
$ a2 b0 X% i6 z0 Fkfftest.cpp:13: 附注:备选为: CHFLL& CHFLL:perator=(const CHFLL&)6 W. E/ u* a7 m" V1 [' `, w; j

# O/ x1 H' A9 V请问该如何解决,才能让CHFLL chf2中的值还原成转换前的值。      

TOP

看了一眼你的 code, 看样子你的 C/C++ 基础还不够扎实, 建议先找本儿教材系统的学习一下      
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

谢谢你的建议,我会好好的学习,! p* Z5 l2 L0 L; d
麻烦你帮我把上面代码改的可以输出转换后想要的结果, 谢谢      

TOP

复制内容到剪贴板
代码:
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[14862 0] #[/color] cat foo.cc

#include <iostream>

using namespace std;

struct CHFL
{
    int xc;
    char sc;
};

struct CHFLL
{
    int xc1;
    char sc1;
};

int
main(int argc, char** argv)
{
    CHFL *chfl = new(CHFL);
    chfl->xc = 0x61626364;
    chfl->sc = 0;
    cout << chfl->xc << chfl->sc << endl;
    char *tess = reinterpret_cast<char *>(chfl);
    cout << tess << endl;
    CHFLL *chf2=reinterpret_cast<CHFLL *>(tess);
    cout << chf2->xc1 << chf2->sc1 << endl;
    delete chfl;
}
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[14862 0] #[/color] g++ foo.cc
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[14862 0] #[/color] ./a.out
1633837924
dcba
1633837924
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[14862 0] #[/color] o
      
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

谢谢指点,      

TOP

唯一的郁闷chfl->xc = 0x61626364;
: T' X6 c5 R) S& o改成输入十进制后输出
/ C4 B- t5 P8 T" {[root@localhost text]# g++ foo.cpp
, T  v1 b6 [# y3 K1 xfoo.cpp: In function ‘int main(int, char**)’:
7 V; `0 d. W; q, o2 efoo.cpp:22: 错误:‘chf1’ 在此作用域中尚未声明      

TOP

发新话题