发新话题
打印

请教关于reinterpret_cast 强制转换问题

请教关于reinterpret_cast 强制转换问题

声明了二个内部完全一样的结构体CHFL和CHFLL ,把CHFL *chf1强制转换成CHAR *test.3 k7 _5 i/ K# E  A3 P
再把test转成*chf2时,G++死活通不过,请问下句该怎么改才好,
5 j/ {2 C1 M  B. \2 ?  v/ c. X! M3 S- d! d2 P1 W9 i& Z
CHFLL *chf2=reinterpret_cast<CHFLL *>(&tess);
5 ^& D2 |" c; L/ O" B请问这句该怎么改才好,
1 k% Z3 }+ B# G1 i4 S) X1 T& B1 V8 t3 L) ?2 n/ x$ l

8 U  Z0 U5 C  V; f#include <stdio.h>; z- Q; Y1 C* z1 o) Q! |
#include <stdlib.h>
+ S7 k  M& h2 [# C5 }8 q" j+ g# ]5 htypedef struct
8 o& y# j  H3 v  l& P% x( Z( @{
7 F2 |, h" D% p$ E5 V) s- xint xc;
, J0 \1 Y0 W( Lchar sc;) ~' l% U! e+ H5 h
}CHFL;
' t+ J% C! _# l% p" R$ l- Ltypedef struct6 {, L/ C' G: R+ ]' n6 t9 \
{; ?7 b" g* q9 D1 ^9 J: R1 y
int xc1;
- f4 D$ Z* h5 uchar sc1;
; Y% Y- I: \/ n& _: `}CHFLL;* O8 L( ^  q4 a% B% C
int main(int argc, char** argv)
# J+ v! j( t1 Z. f3 N; i6 \, N) k{
6 t2 m2 H4 n7 D3 K) S. h! \! GCHFL *chfl;  h  s% x8 A( p: c8 t
chfl->xc=10;
2 {: G$ \) D4 l. h0 nchfl->sc='S';
3 p- B) f) L, Oprintf("sssssssss\n");/ t* s( k! s. l3 I/ n# u$ v& S% J6 c
printf("\n%d%s",&chfl->xc,&chfl->sc);
- x& i' f/ Y% d# |0 f, ^9 Hchar * tess=reinterpret_cast<char *>(&chfl);
" S' ^$ k. N4 ]printf("\naaa%s",tess);% R$ q1 M7 H- ^. n% \
CHFLL *chf2=reinterpret_cast<CHFLL *>(&tess);" |) \3 P0 Y9 R$ @" ?5 |
//printf("\n%d ddd %s",chf2->xc1,chf2->sc1);% J8 F1 J* t' Q' U  |
   return 0;
6 Z2 i. N, B) L* t, k}      

TOP

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

TOP

不好意思,上面的代码能通过,但是执行的时候 提示“”段错误"1 w% c- x; r: x. s; f  i

% D8 _( F! K) A% V: f. D* T6 X当把+ d: p, C  p7 @( s+ V
CHFLL *chf2=reinterpret_cast<CHFLL *>(&tess);
5 ~7 A4 o( v1 y0 u. V" R# e改成(CHFLL *chf2换成CHFLL chf2)* m4 Y: I* ]% H8 n1 X8 d" |
CHFLL chf2=reinterpret_cast<CHFLL *>(&tess);
# P9 M+ D9 p  O2 U; o& X提示:9 q1 G' d7 _0 ~1 f! u
[root@localhost src]# g++ -c kfftest.cpp
2 _& y2 ?/ s$ |2 V  A- P( P' [' Lkfftest.cpp: In function ‘int main(int, char**)’:# Z8 B9 i- U# R
kfftest.cpp:26: 错误:no match 为 ‘operator=’ 在 ‘chf2 = (CHFLL*)(& tess)’ 中
, d) H9 E6 {4 }kfftest.cpp:13: 附注:备选为: CHFLL& CHFLL:perator=(const CHFLL&)
4 a7 C2 q6 j8 |) c3 j: {& S$ C8 z4 k- v1 `3 u0 T, p
请问该如何解决,才能让CHFLL chf2中的值还原成转换前的值。      

TOP

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

TOP

谢谢你的建议,我会好好的学习,
, }8 c5 M. @4 Q. C  g+ G麻烦你帮我把上面代码改的可以输出转换后想要的结果, 谢谢      

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;
& W+ i# L7 m: r- B4 }$ [改成输入十进制后输出 + @+ H6 ?8 i) }8 v; m  v
[root@localhost text]# g++ foo.cpp2 l) Y1 Z+ V. ?! Z6 A1 h
foo.cpp: In function ‘int main(int, char**)’:% f, a% Z, {! I; R( s3 a
foo.cpp:22: 错误:‘chf1’ 在此作用域中尚未声明      

TOP

发新话题