数学建模社区-数学中国

标题: 我的bcb怎么在函数外声明的变量,在函数内无法存储 [打印本页]

作者: 小菜菜同学    时间: 2005-4-29 10:23
标题: 我的bcb怎么在函数外声明的变量,在函数内无法存储
<>我的bcb6怎么在函数外声明的变量,在函数内无法存储。也就是在一个函数中存后,无法在另一个函数中提取。若提取,则和没存一样等于零。</P>, T9 S. H" w) i2 b( @1 M2 N4 m: s, d
<>是我的BCB的设置问题吗?</P>
3 ?% P) |2 M  s5 O<>如下中的ox,oy</P>
6 g5 b3 e% d/ B, ]+ s8 j% p# V<>int ox,oy;( v2 ?$ c+ w; p" P. Q
int x,y;# Y" f5 x) {# G
//---------------------------------------------------------------------------
) K. H3 _7 [5 ?' E& j, O4 {void __fastcall TForm1::Image1MouseDown(TObject *Sender,
. c+ P6 T; V5 }; Y$ Q5 [6 u/ G      TMouseButton Button, TShiftState Shift, int X, int Y)6 n* \. x- W: f% G" L
{ox=Image1-&gt;Left;
3 _# B4 ]- Y& A+ B9 s1 U% f, Zoy=Image1-&gt;Top;
' Z1 T  m& q! [! `  i& Rx=X;( W- k) D+ `5 B! ]
y=Y;
* ]- k: O8 W- W; n4 a9 Z( i}
0 ~: x6 u, J5 Q+ K  |! U; R0 }void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
+ ?6 A$ G& y! }1 w+ j      int X, int Y)
* t& j) V% {. N; n{
3 B4 H& u% [1 X. BImage1-&gt;Left+=X-x;
5 J; `6 ^8 H- U( h; ^( O4 l0 SImage1-&gt;Top+=Y-y;$ j7 b% r) R4 W( o* D& u
}8 r) g) \; u9 w0 ?2 `5 }
//---------------------------------------------------------------------------
& _( i$ c6 t6 i+ L0 j0 f( n& M8 @void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,& ~" d! Z& L0 Q- Z) V0 }- S  B
      TShiftState Shift, int X, int Y)
3 ]) G6 D3 l; e- K6 I{% s3 u, F$ I0 g6 E- ?* K( R" f7 I- R
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;9 B+ I$ @* W- T5 w: I: K
Image1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+  J% S& v- \2 A8 r" |( [# L6 f  l
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;8 k2 k  X6 j0 {. o, |! V1 x+ a
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
* L/ @% R8 V3 w' u0 I0 }6 o5 RImage1-&gt;Top=Shape1-&gt;Top;
# H' T" B6 w: c( z0 N! ?5 D5 aShape1-&gt;Visible=false;
( z7 h- Z; c: b! y) \) X7 ~" O5 yImage1-&gt;Left=Shape1-&gt;Left;
) v0 }! T; g! p}else{- \$ C, F/ a* F5 d
Image1-&gt;Left=ox;+ Z% m+ S/ ]3 n8 `& P- C7 t
Image1-&gt;Top=oy;
' M$ q# S$ y! [2 c}
6 w  G/ E4 L( g5 ?}</P>
* W6 J: Y; x8 J4 c3 V: _<>最后ox、oy竟然都等于0。在mousedown中怎么没存上呢?</P>
作者: ilikenba    时间: 2005-4-29 10:44
<>道理上应该是全局变量,不会存不上的!是不是本身Image1-&gt;Left和Image1-&gt;Top的值就是0</P>
作者: 小菜菜同学    时间: 2005-4-29 10:59
<>谢谢<b><FONT color=#000066>ilikenba的回答</FONT></b>,</P><>不过Image1-&gt;Left和Image1-&gt;Top的值不是0,是不是我的BCB设置的问题?</P>[em06]
作者: ilikenba    时间: 2005-4-29 11:43
我这里测试没有问题,应该是你的设置的问题!我这里都是默认的设置没有问题!
作者: 小菜菜同学    时间: 2005-4-29 11:58
怎么能恢复成默认设置呢?[em02]
作者: ilikenba    时间: 2005-4-29 12:04
<>project-&gt;option左下角有一个default的复选框!选中后点击确定!</P>
作者: 小菜菜同学    时间: 2005-4-29 12:17
<>我恢复默认了,但还不行,我的全文是这样的,麻烦大侠再看一下:[em04][em04]</P><>int ox,oy;
, ]. a8 k+ u$ r& c5 J/ X0 nint x,y;
. g9 G, C' Z% i; z, ^- rvoid __fastcall TForm1::Image1MouseDown(TObject *Sender,2 J  [, s9 W3 `9 x/ o5 _
      TMouseButton Button, TShiftState Shift, int X, int Y)9 \- a. {/ e' Z& I
{
/ U0 [- W8 t7 d$ Z, L/ p+ Oif(Button=mbLeft){4 e6 @7 f: n- t  P
ox=Image1-&gt;Left;" m& S) K9 O& N' C
oy=Image1-&gt;Top;
) i; y" ?3 Z1 m/ j6 _" ~x=X;8 s, I7 I! |' {
y=Y;
& d( v# [+ c1 l9 K4 L% N; @}8 D: E0 h5 U" A$ S
}
  L( _6 \2 L+ `* B% x( y//---------------------------------------------------------------------------
: u% _; M, d9 b& P# R( dvoid __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,/ ]( R; C( Z5 b/ l1 Y' E3 ~$ z8 @0 I4 d' S
      int X, int Y)
" M8 m1 \1 @: s, E) P3 T: d, T{. q' O- L, X: O8 j* y8 N; m: X
if(Shift.Contains(ssLeft)){
3 j! f+ F4 `* |9 F7 M+ SImage1-&gt;Left+=X-x;% e4 X4 J9 o5 B) v
Image1-&gt;Top+=Y-y;
5 r/ u' E- ]% W" e7 b7 a8 u: E}
* P" a: |4 s6 I4 _" v: P$ k}0 l: w3 L* j( \
//---------------------------------------------------------------------------1 [/ w/ \6 Y$ v9 A; m. u0 |
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button," u0 k4 A  c( O9 w8 L' O' p; |
      TShiftState Shift, int X, int Y)
; o8 C* z" |& L{9 S6 g9 K9 h. Q' e$ R1 d7 U
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
; x" {" }# B- f" UImage1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+( @0 v* c) O& f* K& ?" j
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;
( U  E) @3 `& i4 e  H Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){# c& g7 x+ o& i2 d& \4 b( A* ]# U
Image1-&gt;Top=Shape1-&gt;Top;# r: j! H$ ]+ j3 a& W8 s) t# P8 |
Shape1-&gt;Visible=false;6 [" A! o, E, `
Image1-&gt;Left=Shape1-&gt;Left;& x3 r4 P' J# L( l2 y
}else{
' M8 g/ ?0 I: I4 I  D$ ~+ AImage1-&gt;Left=ox;
1 ~! F4 I9 c: g6 v3 ?Image1-&gt;Top=oy;
" T. \2 r( b9 h, \$ g}3 r! z4 v! u7 T% d/ }5 U8 P
}</P>
作者: 小菜菜同学    时间: 2005-4-29 12:27
<>而且我要是定义 extern int ox,oy;</P><>[Linker Error] Unresolved external '_ox' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\UNIT1.OBJ</P><>会有这样的错误信息</P>
作者: ilikenba    时间: 2005-4-29 12:33
<DIV class=quote><B>以下是引用<I>小菜菜同学</I>在2005-4-29 12:27:12的发言:</B>
  m" u  m0 v) ]4 K, c2 b+ }8 s7 T. B+ K2 C& C2 h6 [  A
<>而且我要是定义 extern int ox,oy;</P>
* i7 L% Q8 i% `8 M0 i<>[Linker Error] Unresolved external '_ox' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\UNIT1.OBJ</P>
, H# R9 E' g/ p* ]<>会有这样的错误信息</P></DIV>5 u( T( U7 R/ `4 _. D
<>当然了,这是声明ox是外部变量,而不是定义!</P>
作者: 小菜菜同学    时间: 2005-4-29 12:38
那还有什么方法使它变成全局变量吗?
作者: ilikenba    时间: 2005-4-29 14:48
你不如把这些变量放到一个类的成员里面!
作者: 小菜菜同学    时间: 2005-4-29 15:24
<>1、1、1、1、
( L' N; S8 e1 W6 a4 U/ j//---------------------------------------------------------------------------</P><>#include &lt;vcl.h&gt;
( R! v( k- h6 i. k2 S  W3 S+ Y#pragma hdrstop</P><>#include "Unit1.h"# |. m0 ^6 r1 t. u5 R
//---------------------------------------------------------------------------! `: Q; j9 N. t2 o9 f
#pragma package(smart_init)4 B3 O" y1 _( x8 ~; k1 [# i
#pragma resource "*.dfm"$ w) S, m: E  G4 x( D
TForm1 *Form1;0 f+ s& b! k6 R" Y, w& C
//---------------------------------------------------------------------------, [) G: Y. q1 }* w. \: x/ }( f
__fastcall TForm1::TForm1(TComponent* Owner)1 W+ P' m: T$ ~" `! C
        : TForm(Owner)+ \8 T1 Y4 [) U4 n" q* _, K
{
( \" p  j) u+ f0 {7 N, S}
  ~; a5 ~$ Q5 q6 U//---------------------------------------------------------------------------4 Y, w5 f/ H, J5 ?& X# i5 R
class cla{
4 g2 b# d$ s1 V4 G7 S1 ^  mpublic:
+ C9 z" V" y8 q4 \9 J5 `6 w9 e: sint ox,oy;$ G  t4 t2 g5 [; g  q
};! }4 I- s2 e0 l/ o
cla *a=new cla;
2 @4 j' w8 k2 x1 B7 cint x,y;2 \# Q. u5 z4 `6 s2 a6 t0 q* [2 \: J
void __fastcall TForm1::Image1MouseDown(TObject *Sender,0 L1 N% m/ d" b4 {' }2 v
      TMouseButton Button, TShiftState Shift, int X, int Y)
. Q9 i& s) Y, A) G, D( }{
$ ]) c4 T7 C* o) C6 R if(Button=mbLeft){
) e8 @7 B) F4 \, {+ j) P/ T: Ja-&gt;ox=Image1-&gt;Left;
2 I, U/ c. M' t5 c% R% t3 Qa-&gt;oy=Image1-&gt;Top;
2 c( j2 o5 [. K4 m5 }' mx=X;8 y, n/ x5 b- F
y=Y;% T9 c; Y' s# x- y# U3 f+ z
}4 j+ y+ w9 j9 m# ^" T3 D3 P
}# A: ^3 s6 ?( R4 u. ?' d
//---------------------------------------------------------------------------; Q& X0 O/ j# X8 Z8 D' L
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
6 i' N) J& [- [( K# W1 b, r3 }  J' n+ T      int X, int Y)# r, W. c3 E7 {9 W: m8 g% a
{. s. W% d; V" w$ A* |( J0 ~
if(Shift.Contains(ssLeft)){
5 J6 k' u" |0 {' J: {) zImage1-&gt;Left+=X-x;" |" a$ m( d+ ?9 t' Z' \4 X
Image1-&gt;Top+=Y-y;. T6 l' P+ H, G( U; {
}
. b! [- _: e" n' _" Y5 J}
4 M( M$ C1 S- W0 Z& s3 L//---------------------------------------------------------------------------
( e! x: H/ U1 y1 C$ n* q  v0 ovoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
/ R+ e+ E) a* G4 h* c6 I      TShiftState Shift, int X, int Y)" ?$ s/ G5 M4 L6 f
{
" i' b+ `% L0 M4 ?! b if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
( E4 m- W3 @- O, T2 }Image1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+
! w- A$ V" U7 Q# h* h20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;
3 C, E. m' g# D" u# O8 c( @' Y Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){1 J; ^( K- a1 r, b# d% U
Image1-&gt;Top=Shape1-&gt;Top;
/ K& Y% f2 O+ P1 KShape1-&gt;Visible=false;
3 I$ |- j, s8 r+ G) FImage1-&gt;Left=Shape1-&gt;Left;4 z. {$ O: Z8 w. G7 G/ E
}else{& \! z9 y2 W0 k9 I
Image1-&gt;Left=a-&gt;ox;. L, A2 d( @( q7 A% |0 E( L8 [
Image1-&gt;Top=a-&gt;oy;
( N( E2 U. d! P) \; }}
: ^' A8 f. i. |7 V. \+ x1 x}</P><>2、2、2、2、2、2、2、2、2、、2、2、2、2、2、、2、2、2、2、2、2、2、2、2//---------------------------------------------------------------------------</P><>#include &lt;vcl.h&gt;. \- a+ s" _* x/ A9 n0 C
#pragma hdrstop</P><>#include "Unit1.h"
* o2 m, r) C8 z  A4 A+ ?5 i& A//---------------------------------------------------------------------------+ D  e( C+ Q! j. f7 G
#pragma package(smart_init)
* A/ n# Q6 }0 ]8 ?7 G; l6 d#pragma resource "*.dfm"0 D8 q0 ^1 G. {1 L5 k$ j: S% m3 C
TForm1 *Form1;: \5 |' \- h# z, X
//---------------------------------------------------------------------------
9 W( l) @9 K1 L/ L$ d1 l3 ^__fastcall TForm1::TForm1(TComponent* Owner)
' x! ^9 p' ?6 }2 R3 _* |: ^: `        : TForm(Owner)
% Y2 @7 g; D/ f7 T' s. C5 h& D{! f; T+ z0 I- g( a1 ~) r- w% q
}
2 T- r3 d2 y( i2 f. e//---------------------------------------------------------------------------
5 G' \' e! T1 k: \5 H4 Dclass cla{
7 z" x; `+ J+ kpublic:
" _4 I* o# A- f  ^! S, [3 Rint ox,oy;
, p' a# W/ m  `6 P. bint get_x(){return ox;}2 t/ g+ _1 j+ c& L" n
int get_y(){return oy;}
6 D4 T* @$ u4 F& O/ g: p- [. v0 x8 Y};# v' `% L4 s; F" ]
cla *a=new cla;
- I, O8 R) P- Q1 Yint x,y;
$ r& o5 i, L* {+ ^; V2 F8 p4 Y( x0 avoid __fastcall TForm1::Image1MouseDown(TObject *Sender,
  Y0 s! M% C9 ~      TMouseButton Button, TShiftState Shift, int X, int Y)
. r8 I% f) \' o; q+ ?- x' X8 v0 g{
# x0 m2 M7 }- o; G7 i, m if(Button=mbLeft){' K- r) |9 }3 f9 s  p
a-&gt;ox=Image1-&gt;Left;
* v. U7 n* F0 {a-&gt;oy=Image1-&gt;Top;1 m: i4 B. d! o8 W- [$ F
x=X;" e9 q  x# H3 T) g+ u# d0 W
y=Y;% o: [2 M2 p% B: W2 Z
}2 O4 D- o' G: @, w+ F; }: f
}: x0 S* z* ?- k% T
//---------------------------------------------------------------------------  [! t! p9 q2 n- f, k; N/ q
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,' ^. J7 S. U3 T
      int X, int Y). u0 u6 }' Z/ F6 F1 I, I3 D
{" r0 g0 B% X! V0 g
if(Shift.Contains(ssLeft)){
" P: y6 H2 b& G! S: n1 LImage1-&gt;Left+=X-x;  T* y5 ?. F9 I$ x& E/ }3 I
Image1-&gt;Top+=Y-y;" m7 i$ t' f3 t/ k  Z1 o3 _( ^. }# y  e
}* [- n/ D# j" l! d6 Y$ w( R" H& W0 D. x
}; Z# D0 r* A" O2 t9 n
//---------------------------------------------------------------------------/ _7 f. t/ s+ u6 p" T/ n
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
! |* u! B9 Q& a      TShiftState Shift, int X, int Y)9 S0 T: W; n/ T3 ]  }$ Z5 a
{
9 R! T6 c  N% g1 F/ uint x1,y1;
: @+ r& p# X* K7 j! J2 a( v- c if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;5 G: p; g# n7 t, t4 q3 o
Image1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+, q% m  K9 s2 d
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;
. b6 n( j, a( y9 v Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
. @( X6 F0 U. S1 D( t2 H$ O. DImage1-&gt;Top=Shape1-&gt;Top;3 Y# |! j& l! z5 v6 e
Shape1-&gt;Visible=false;; H4 ^$ M5 W! u- m( w
Image1-&gt;Left=Shape1-&gt;Left;
+ M' R7 B0 J5 k* x( p}else{
) g$ g7 H: e' c$ {: v2 ox1=a-&gt;get_x();( q9 [# A- a2 D% G; @/ ^6 g; V
y1=a-&gt;get_y();
% h5 }2 A/ n8 C1 r! Q2 U7 JImage1-&gt;Left=x1;( W% b4 q; @5 L
Image1-&gt;Top=y1;
- A7 a$ E9 v6 X% \: s) k6 Y}
. }1 e+ t" z* \* f+ p}</P>
作者: 小菜菜同学    时间: 2005-4-29 15:27
<>以上两种都不行,</P><>我在没有mousemove\down\up时</P><>全局变量好使</P>
作者: 小菜菜同学    时间: 2005-4-29 15:28
<>总提示[C++ Warning] Unit1.cpp(28): W8060 Possibly incorrect assignment</P><>定位在 if(Button=mbLeft){</P>
作者: 小菜菜同学    时间: 2005-4-29 15:35
<>简化成这样:还是都等于零,我要吐了[em06]</P><>int ox,oy;9 ~' R4 y5 K6 R
int x,y;  m8 @% j) j- C; k; M
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
7 i( E1 u8 W; z! o4 d      TMouseButton Button, TShiftState Shift, int X, int Y): c+ e, G/ j+ x. n  H+ O
{
2 [$ R: q6 C: T( k5 h6 x if(Button=mbLeft){2 X' C+ K. h8 T+ L1 f( X+ _
ox=Image1-&gt;Left;
" k6 w' }6 I+ m1 C; W  c6 n6 }0 B& ooy=Image1-&gt;Top;
  V3 w5 A  ]5 ~1 Sx=X;5 W% E1 T+ H; s# A& ^
y=Y;
; I; F; J" ~9 H! a( C9 I}
! L2 K0 O4 ]2 M4 K}
% B0 n4 L) m& j" ?( A//---------------------------------------------------------------------------
* E0 V/ U" J3 w* @& Z# Avoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,9 S/ R" m" a$ b0 }5 r, ]
      TShiftState Shift, int X, int Y)% S0 T6 I5 [* W$ o: f9 c9 a4 ]0 C
{
# v5 ?9 ]% r/ o+ z5 Hint x1,y1;</P><>x1=ox;( A2 r$ T* C* Q+ g' y  U2 c
y1=oy;. t/ `- @) G; \3 D+ b  j
ShowMessage("ox="+IntToStr(x1) +"oy="+IntToStr(y1) );% H# T/ z! z' j+ P4 R) N
}</P>
作者: 小菜菜同学    时间: 2005-4-29 15:42
<>重大发现:以下不是0。而加上if(Button=mbLeft){就为零了。病根找到了,但怎么回事呢?</P><>int ox,oy;
3 x6 G' U6 L! ]8 h4 ~8 Cvoid __fastcall TForm1::Image1MouseDown(TObject *Sender,
4 |0 U+ k0 _' v. U. \3 r6 V      TMouseButton Button, TShiftState Shift, int X, int Y)$ z6 i0 ~, I6 a7 g9 o
{/ {7 N' @1 ~/ Q2 R
ox=Image1-&gt;Left;
. g5 k% R- U% C2 koy=Image1-&gt;Top;' ^1 z2 d1 h" O
}
  k- C  {0 L/ a; L//---------------------------------------------------------------------------6 c+ I: N6 H# W& p
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,( A+ l1 m3 e5 m: n2 P' K
      TShiftState Shift, int X, int Y)5 U0 V9 l# U8 v/ b# c. Y6 @% C8 D8 y
{' g2 J" N0 S0 r' s
ShowMessage("ox="+IntToStr(ox) +"oy="+IntToStr(oy) );5 A* M  S3 h( t6 c% r( `! T1 L
}</P>
作者: 小菜菜同学    时间: 2005-4-29 15:54
<>对,去掉mousedown中的if(Button=mbLeft){}就实现了拖动图片到图形中的功能了。</P><>总算喘口气。但if(Button=mbLeft){}没什么毛病呀?</P><>刚写到这,一看书,我恨不得打我自己一巴掌!</P><>应该是if(Button==mbLeft){}。</P><>[em06][em06]</P><>这种错误BCB6怎么不拦住我呀!?</P><>让各位见笑了</P>[em04][em04]
作者: ilikenba    时间: 2005-4-29 16:02
<>晕!判断是否相等要用两个等号!</P><>呵呵!我回答的晚了!BCB的编译器的错误检查不严,你可以通过设置加强!</P>
作者: 小菜菜同学    时间: 2005-4-29 16:09
<>不过,几乎废了3、4个小时,还算有点收获。写出来大家是新手的共勉。就是知道:</P><>1、怎么一步一步找错误了</P><>2、知道了怎么恢复默认设置——谢谢</P><><TABLE cellSpacing=0 cellPadding=4 width="100%"><TR><TD glow(color=#9898BA,strength=2)" vAlign=center width=*><FONT color=#000066><B>ilikenba</B></FONT> </TD><TD vAlign=center width=25></TD><TD vAlign=center width=16></TD></TR></TABLE></P><>
4 C+ K& c$ |5 O. h& S3 `# k少校 的指导</P><>3、熟悉了全局变量的用法</P><>4、让我花1个小时想想4是什么,还有5....  (3、4个小时可不能白费呀......4是什么呢?伤脑筋呀)  J2 Z/ R# T# _& f0 T( D
; n2 `3 z; j* m
</P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5