数学建模社区-数学中国

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

作者: 小菜菜同学    时间: 2005-4-29 10:23
标题: 我的bcb怎么在函数外声明的变量,在函数内无法存储
<>我的bcb6怎么在函数外声明的变量,在函数内无法存储。也就是在一个函数中存后,无法在另一个函数中提取。若提取,则和没存一样等于零。</P>
* `. }; I6 M5 c- T6 I# l8 ?/ e<>是我的BCB的设置问题吗?</P>; L/ W% u- D- b  W+ e
<>如下中的ox,oy</P>
/ ~& T& u4 _5 L1 c<>int ox,oy;, q6 b3 B! d, o2 Q
int x,y;
5 k+ @8 s' c$ G5 V9 X% N2 k//---------------------------------------------------------------------------
( j' g- G" ~0 u. ^& m) }& D; hvoid __fastcall TForm1::Image1MouseDown(TObject *Sender,, q5 S/ g+ ^, }2 G7 H& f9 P
      TMouseButton Button, TShiftState Shift, int X, int Y)
$ K+ E/ r" g9 M- H{ox=Image1-&gt;Left;
6 u- ?* b, |5 _  c' L$ j5 hoy=Image1-&gt;Top;
$ y, N: O; o. e9 @2 q3 W9 ]x=X;3 X( N* z& q+ ?0 U
y=Y;
$ O; r3 A$ m, E& W- r% z4 b+ Z0 R}
* ~& `% S2 Z/ g' B9 C8 ]void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,7 B; q6 `9 ]8 M9 b4 L- ]
      int X, int Y)  L+ J3 s. @# ^, W
{5 V, R. y/ n+ o6 ^' n. o- C
Image1-&gt;Left+=X-x;
. k; _+ Z$ e$ Q2 iImage1-&gt;Top+=Y-y;6 J. Y5 M0 ]3 L9 N3 e) a2 Y; W
}$ s9 v7 u0 m3 U- y
//---------------------------------------------------------------------------: H% M4 t! z1 s. o' l( [
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,+ y  i" H$ h* P% n$ d2 M
      TShiftState Shift, int X, int Y)
; E/ u1 `4 X/ V+ v{
4 ?% }3 a7 r: E! \1 U+ i) Mif(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
" r9 A# u( c. p# [4 b, Q# |. Z! K8 lImage1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+$ N/ B; [6 f' y
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;! u3 C" e$ U+ a
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
* N- ^" m( c0 d. b" TImage1-&gt;Top=Shape1-&gt;Top;
5 z) r2 o- p4 W$ g3 b- [- N+ g/ k# v- BShape1-&gt;Visible=false;
& S$ \. v: v+ l1 i! AImage1-&gt;Left=Shape1-&gt;Left;: S8 i" d- z% i9 V- p5 D) v! e
}else{* s/ h& O4 X  Y5 `8 }
Image1-&gt;Left=ox;
0 J( S9 g, _$ w; m4 yImage1-&gt;Top=oy;4 r/ ~: S8 w! q  F! N$ X
}) }6 o2 P, n0 ~2 W# M( x
}</P>
2 D( w% h3 }0 O) [2 c* P<>最后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;
& d% K& V- k! S5 a$ u" m& M" Rint x,y;
/ v0 y: t' F2 K2 b) Z) gvoid __fastcall TForm1::Image1MouseDown(TObject *Sender,
5 Q: j6 |% S+ h7 a      TMouseButton Button, TShiftState Shift, int X, int Y)
$ ^4 E0 n' c2 C  q" y1 V# b{# v" c, _# O/ r# \  R
if(Button=mbLeft){
: f* l7 q' [; ^ ox=Image1-&gt;Left;
& B* M$ m) D1 P, O' {; u, u, goy=Image1-&gt;Top;0 Z; y  F+ |: c; A
x=X;5 K7 R2 c" P! l% t; G9 b2 q- {
y=Y;
: A. l+ ]2 F/ L6 A" R  F3 d}
1 |3 {* Z2 N7 h' [/ V) F}
) |6 T8 ~# \' X; ?//---------------------------------------------------------------------------2 {' e4 H9 Y2 v2 _2 d/ W
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
3 X9 h8 x7 F' I2 W: ^6 S% V5 \      int X, int Y)7 r4 |% [! n1 P0 ]
{
! m' I* h7 l4 H/ z; `" D, ~4 Eif(Shift.Contains(ssLeft)){& e! n, K8 V  B/ L, ^7 K( Q& e
Image1-&gt;Left+=X-x;
9 M& C( y: ~$ G8 |7 TImage1-&gt;Top+=Y-y;% k" g% m. }3 ^. T% D6 c
}& F: Z$ k7 k, }" i& m9 `* }
}/ T1 D. J: v6 a2 x7 f; s, @
//---------------------------------------------------------------------------7 w9 Q) `- @+ D% A! g: }
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
  f8 T3 \& v0 P1 ?, i. P      TShiftState Shift, int X, int Y)$ b: o# ]- S1 A
{
9 D( u) _' R1 O$ Jif(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
7 }$ \& P5 f* M$ [2 p4 XImage1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+; d& w3 E! s. k$ L  j
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;) l3 V6 S2 S& n7 X, D3 D, M
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){" X. I! T. r( l; e3 S0 ^+ W% a
Image1-&gt;Top=Shape1-&gt;Top;
) b) w- g4 @& J8 \2 qShape1-&gt;Visible=false;& x; v; u8 t- C: N) T  E! |
Image1-&gt;Left=Shape1-&gt;Left;2 S2 }6 M% U# w9 p
}else{; R' @. r2 D- r, N
Image1-&gt;Left=ox;3 |$ F9 \: i' ?1 ~2 ?3 M* G; @
Image1-&gt;Top=oy;  \" [( O& n! J7 l, h5 X
}/ Z( X/ u: g# s
}</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>
: u- {  q0 l0 ^3 g" Q/ O7 n6 ?/ ]/ N5 |
<>而且我要是定义 extern int ox,oy;</P>* K0 Y) W: \' w* v: K5 _
<>[Linker Error] Unresolved external '_ox' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\UNIT1.OBJ</P>
; B6 h$ s* K* V( l9 p6 ?/ s& }<>会有这样的错误信息</P></DIV>
! X, I# J2 n, ~<>当然了,这是声明ox是外部变量,而不是定义!</P>
作者: 小菜菜同学    时间: 2005-4-29 12:38
那还有什么方法使它变成全局变量吗?
作者: ilikenba    时间: 2005-4-29 14:48
你不如把这些变量放到一个类的成员里面!
作者: 小菜菜同学    时间: 2005-4-29 15:24
<>1、1、1、1、
9 z% F/ |. l0 I! w+ m- c3 a//---------------------------------------------------------------------------</P><>#include &lt;vcl.h&gt;
2 @/ N/ e8 s. V2 l' q& X#pragma hdrstop</P><>#include "Unit1.h"
9 u, @& T1 F5 _" F5 {+ i, m7 m2 D/ ^//---------------------------------------------------------------------------! m. {& I0 m3 f: L6 n3 _7 G
#pragma package(smart_init)
9 M  A8 Y% f& }. J$ z% u#pragma resource "*.dfm"
1 ]3 r! D) J& h; q7 F  R! rTForm1 *Form1;$ b; E& I6 l3 A' ^) H% _$ q3 z
//---------------------------------------------------------------------------. f) M) v) p  ?  H
__fastcall TForm1::TForm1(TComponent* Owner)/ L" q# `1 w7 t" r: B% j
        : TForm(Owner)
/ c$ N  [! ], C  c{# s" }; s) g/ l5 ^4 A; N9 u, e
}/ N- _6 e9 H9 b2 q+ g# I
//---------------------------------------------------------------------------
3 D, N& ~! l8 xclass cla{
' m) @, K% I: M' _! Y2 Gpublic:
6 k/ g8 F' L) K$ |int ox,oy;- I) G& e9 `  G. S5 ]
};
! N1 m4 D2 b+ Z. T% H& \cla *a=new cla;
" Z5 V( g5 g, I. g1 v# ^$ @# wint x,y;9 ]: ^# F) Y  n3 J) N* v/ }3 `
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
  C; g, [7 X$ ?+ C; a# ?      TMouseButton Button, TShiftState Shift, int X, int Y)
5 J0 u7 y; S8 w% h# p' b' E$ g{
; Q% |% A+ b4 P* T$ O if(Button=mbLeft){
& v. {$ J6 m1 e! g5 ka-&gt;ox=Image1-&gt;Left;$ s$ e# w: y! Y/ E. a" A. M
a-&gt;oy=Image1-&gt;Top;
: F9 `1 q7 Z6 j4 X& m6 C: p, Jx=X;
7 X5 Q0 l8 j' q/ x3 n( oy=Y;" ^# D6 F0 @: D; _
}
7 E: r# j; Z* A}9 D: \2 _- R& z! ]
//---------------------------------------------------------------------------
% \- `$ \* ]. ?6 j' c* ]3 Z5 }8 ivoid __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
( |, R6 g, s5 s+ S+ a- u      int X, int Y)2 H6 b' M9 u2 C, \
{( \  S. \! b% l$ S* {; m
if(Shift.Contains(ssLeft)){
% e8 w- q- F: }9 P! L( WImage1-&gt;Left+=X-x;, a: k5 Z* {' C, A  n, q
Image1-&gt;Top+=Y-y;
* m7 F8 [/ V3 \5 X+ ?9 N}
$ }/ x% a+ {, N. Z* A}
3 n$ z: q/ b4 G1 M4 t, s//---------------------------------------------------------------------------% O/ G/ O5 x# v8 Q" Z% _; y
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,. v& p1 A: r4 i2 A
      TShiftState Shift, int X, int Y)1 F0 w" A, X4 H4 P; o
{3 O1 L% ]: R+ p6 Q- L% }
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;% O: I  ?1 e$ c' C! Y
Image1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+. L2 U+ ?1 g0 p+ g' H' Z. }% A$ ]
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;: m7 H' S( ]& l% K3 E
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){' K. T% m3 Z- X. v4 B- e& j
Image1-&gt;Top=Shape1-&gt;Top;
: @( t3 q& |2 ^: DShape1-&gt;Visible=false;" E; y+ e8 B! ^1 U9 w8 H+ ]2 l
Image1-&gt;Left=Shape1-&gt;Left;' n' b" n) B! ]2 L- a
}else{) s. W& R( n) u! S* {
Image1-&gt;Left=a-&gt;ox;
2 Q% U* q/ u4 [0 l$ z! F! o0 AImage1-&gt;Top=a-&gt;oy;
. }/ W  Q! }1 D3 B! X( }}) \, n" ~2 b: S* a- Y  c# Z1 w1 ~
}</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;0 _  I" r( N; M; y7 [
#pragma hdrstop</P><>#include "Unit1.h"+ E3 O1 h+ V7 W' ~" [5 o
//---------------------------------------------------------------------------$ M! C  W& t3 E8 A
#pragma package(smart_init)9 ^5 a- M/ B4 Z4 O9 b9 w; x
#pragma resource "*.dfm"1 z, ~# O5 o5 k6 [9 V/ [! T% U* O
TForm1 *Form1;$ I9 X3 G' w8 J  U$ u
//---------------------------------------------------------------------------( `" _, p/ n8 D1 Y, U! g
__fastcall TForm1::TForm1(TComponent* Owner)
# T9 h  `7 D0 c+ i, o        : TForm(Owner)
' B4 |' N: a. y+ ^3 ?, I{+ s* V8 d' E: H& B* R: p
}5 [5 o% f( I% F$ T+ X9 {* x
//---------------------------------------------------------------------------1 X5 ]  X6 r; h! Y( e
class cla{
6 j, B  ^4 L& L) `! [# _& Vpublic:
; P) Q% z9 [, H9 t- C" D5 Tint ox,oy;
. b. K8 Q- ], J3 g3 |int get_x(){return ox;}8 T8 w1 a+ u/ ^, z9 q$ V
int get_y(){return oy;}, H2 b1 y# V) k- J+ Y
};  A% n  U: L0 R  B' T
cla *a=new cla;. p8 b/ v. W% u% ]
int x,y;9 o0 T0 k0 p* F+ l
void __fastcall TForm1::Image1MouseDown(TObject *Sender,; ~' i# _+ f3 D/ i$ C( ]0 J
      TMouseButton Button, TShiftState Shift, int X, int Y)
8 Z- m  L% y9 X7 f{
. L9 ~7 M" j/ e, t4 r) r& Q( d if(Button=mbLeft){$ g% M+ a. H2 y+ ^  N  R0 B  ^
a-&gt;ox=Image1-&gt;Left;: A& E' [  z9 a" ?0 S! ^9 L* Y
a-&gt;oy=Image1-&gt;Top;- l: ^  ~- s' C8 K' w
x=X;
. N' {# v% }; X1 f* }+ Cy=Y;
2 S" ]; W) P; X% o) s}
. T9 w; S7 ]# l! H7 I}5 ~, a6 Y& l/ h: j7 e6 ?
//---------------------------------------------------------------------------
: ~# K+ W& `/ l  A' }: Z' A2 [void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
  e) h( z: R4 H- l* z1 V9 J      int X, int Y)
8 X. E# L# u2 H; }/ H# j" O% S4 x{
6 V2 N5 w8 s" nif(Shift.Contains(ssLeft)){+ x6 _/ e5 a) P0 @& [
Image1-&gt;Left+=X-x;
& p5 \4 h8 `, f' I# ^+ o: ?3 ?Image1-&gt;Top+=Y-y;
+ w# ^$ {* x$ n( Q/ U$ t7 D/ P4 Q}
' F+ a- ^$ ^+ T}
/ q, H" i6 H3 w- h  H6 l//---------------------------------------------------------------------------
) v. K* ~& v6 [void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
: F- A' _; H7 Q! G; n- i1 g      TShiftState Shift, int X, int Y)9 z2 }0 |4 P6 A- n# A2 ?
{- _# M# V1 `' W3 h9 m
int x1,y1;( }% t3 e! x# ^1 \7 ~
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
! k# x! ~; @0 I# z. oImage1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+
4 |% L. o1 _4 S8 E# b20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;0 k  ]- u- |1 I. u0 {! k: o# M, ^* q6 C
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){7 y  C0 a! n1 \  D
Image1-&gt;Top=Shape1-&gt;Top;# t: N: }$ X+ u, `0 C+ f
Shape1-&gt;Visible=false;6 k0 p2 s& M% z6 n! O
Image1-&gt;Left=Shape1-&gt;Left;& L4 |+ i1 j! \' n1 _
}else{
( A) z+ V  P: [+ Lx1=a-&gt;get_x();
) b' {8 x) @# t5 p, p9 Ay1=a-&gt;get_y();
) c; H) S7 H. i' a" G3 T  AImage1-&gt;Left=x1;7 e+ z% o( {+ U4 e1 R5 @: \# Z: a7 I
Image1-&gt;Top=y1;
& [- {& W1 H/ \5 ~  Q}& [4 n% ^' c6 w. s! Y
}</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;
$ j) g) V  Z; ]* f3 yint x,y;) t  d2 ]4 U$ F: Q' O
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
6 |" x# h! K' i* V# u      TMouseButton Button, TShiftState Shift, int X, int Y)
1 ?- W! j' ]& B# p5 N* _8 f. s{* A( S' d. c6 y1 C
if(Button=mbLeft){
5 u, Q" x" _- Z" c6 mox=Image1-&gt;Left;4 a6 [5 c4 y( G+ k% |. L3 J. d9 T
oy=Image1-&gt;Top;4 w/ a! S6 |: ^. q* r. L
x=X;3 k4 p( S: F6 p5 t$ E. G# H/ v
y=Y;3 `# P  j/ a+ `' N7 b+ \# L7 X
}" F" s' v) W. ^8 B
}: T2 P* i8 y* F9 \
//---------------------------------------------------------------------------
2 n  r* E% R% o& jvoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
' f& v. `3 j+ z! W      TShiftState Shift, int X, int Y)+ d& ^9 a6 F7 Y. B
{
6 M. q6 ], M* X4 \5 T$ {& @int x1,y1;</P><>x1=ox;3 \' k+ n. T3 i# p! x# K, ?
y1=oy;2 g8 Z; D6 ~; D, @$ H
ShowMessage("ox="+IntToStr(x1) +"oy="+IntToStr(y1) );
3 x$ D/ ?7 ?" L, r+ x}</P>
作者: 小菜菜同学    时间: 2005-4-29 15:42
<>重大发现:以下不是0。而加上if(Button=mbLeft){就为零了。病根找到了,但怎么回事呢?</P><>int ox,oy;
# @/ B7 R% d2 G: Y- U% Ovoid __fastcall TForm1::Image1MouseDown(TObject *Sender,
7 \' S1 b3 _1 t+ H% X      TMouseButton Button, TShiftState Shift, int X, int Y)
9 l9 _& r* M  f1 }6 _7 p' m" w{
# e4 _7 h- T/ Pox=Image1-&gt;Left;0 F' S' A$ q4 c/ q" f: J: v
oy=Image1-&gt;Top;6 i$ F/ ^1 Y6 j
}  }3 d$ I$ h4 J
//---------------------------------------------------------------------------
! l; R) Z% G% K- L* avoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
) Q' c1 T( a6 S3 p& w4 Y      TShiftState Shift, int X, int Y)* W/ U; M5 P7 l7 P3 A$ {* _
{! e* l7 t; R5 h* k4 f) b3 b; w
ShowMessage("ox="+IntToStr(ox) +"oy="+IntToStr(oy) );3 r+ Y# x2 x' l" u" I1 r( z$ G
}</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><>
% [& v8 s% I! t! R" }1 s少校 的指导</P><>3、熟悉了全局变量的用法</P><>4、让我花1个小时想想4是什么,还有5....  (3、4个小时可不能白费呀......4是什么呢?伤脑筋呀)+ q# v& T# q- U. \4 a- e/ e

1 g# S# H0 k7 q9 k1 m+ R8 M</P>




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