数学建模社区-数学中国

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

作者: 小菜菜同学    时间: 2005-4-29 10:23
标题: 我的bcb怎么在函数外声明的变量,在函数内无法存储
<>我的bcb6怎么在函数外声明的变量,在函数内无法存储。也就是在一个函数中存后,无法在另一个函数中提取。若提取,则和没存一样等于零。</P>3 c$ |  F" [5 }! |- f# c
<>是我的BCB的设置问题吗?</P>" I9 l1 k+ n  E4 z. n* ]. K4 H( M' B
<>如下中的ox,oy</P>
  m! T( n6 r& a<>int ox,oy;# u9 l5 Q8 {, x
int x,y;
! B( }# {( c$ N$ q% H- N, ?& B//---------------------------------------------------------------------------1 z% q) f! L  [4 J9 y  i0 g$ P) G
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
7 I$ `6 r+ [8 w- H2 l      TMouseButton Button, TShiftState Shift, int X, int Y)
. M! w  c0 b% z5 _) N6 Z* k9 p- A{ox=Image1-&gt;Left;: U$ L' e# ?5 J  R4 g2 E
oy=Image1-&gt;Top;
4 M2 J- ]7 q7 Wx=X;1 Z; b0 y0 I! f, }6 S% F. s) d5 ]. P
y=Y;5 g( u+ S- ^  [7 p6 D3 _
}
! ?; _4 J/ O6 [; r: ^- pvoid __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,, O, S  F0 [' C6 d
      int X, int Y); r& j- Q/ }2 _! s2 r5 ~8 @2 V
{* I% V' ^7 o) A; |
Image1-&gt;Left+=X-x;
8 B$ d% O5 g5 f: i# r$ N$ fImage1-&gt;Top+=Y-y;: }( {  Y  S, p2 y. U
}
+ W  N4 O8 C& }* }0 w//---------------------------------------------------------------------------
" {1 B" U- f0 q  {  r. e% Zvoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button," F  O$ o& T+ P* i9 U
      TShiftState Shift, int X, int Y)
2 r6 H- B/ o+ e{
9 x1 K: y% U. w' ~, O9 g: n. U1 Zif(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
& o, u! L$ z9 ?2 n1 A1 X8 \2 jImage1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+0 ~* r, `; g4 f
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;+ C4 E- {" G5 R8 r# T) S% p
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){3 @+ ?* ]) F3 I# Z
Image1-&gt;Top=Shape1-&gt;Top;
- L1 O& y9 b. q" cShape1-&gt;Visible=false;
1 H" G7 v) m5 m5 eImage1-&gt;Left=Shape1-&gt;Left;+ \& k; ~1 D% [. [0 T
}else{
) U" R# M$ m3 vImage1-&gt;Left=ox;0 M* T; z$ d) M2 j/ t  i/ \' t' O/ f
Image1-&gt;Top=oy;
) z) H8 U# d+ Q, b/ {" h}
; w2 E& d  [. G( \}</P>
  b0 I( B  i& y# u* K7 \' s/ L<>最后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;% @# y; y: d- p( _- ]( _& x: p6 U
int x,y;2 G5 l+ o0 h# E7 `
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
* N" G2 o* C% }, \' i: N      TMouseButton Button, TShiftState Shift, int X, int Y)
+ k. q2 B' f+ [: m# D; T{7 s. }  O. c% y; s6 H% Y' _  f! O
if(Button=mbLeft){9 `+ A' C; O! b( T) u
ox=Image1-&gt;Left;, Z& C' ~- i. |2 ^' z4 w8 H9 [
oy=Image1-&gt;Top;
* M7 y5 `* S, S( L+ v+ ]% j4 `* {' m% qx=X;# t3 r' A1 Q8 z1 F6 g  c0 `
y=Y;
4 J; Z* M& P/ O3 ?( g/ q6 }% X3 W}
# i7 X5 \+ Y( C}
: _" J0 V4 ~1 {" v2 @* h7 q4 d( n//---------------------------------------------------------------------------
. R9 }2 G' y7 bvoid __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
0 [# \( l& t1 \. [0 ]/ c      int X, int Y)
+ r% s/ y) Y6 W  H1 B5 \1 j4 _. v4 G1 w{4 _8 n6 _' W# s  i
if(Shift.Contains(ssLeft)){* ~3 N0 X7 ?# y8 B/ D
Image1-&gt;Left+=X-x;/ X  `; l5 V3 \
Image1-&gt;Top+=Y-y;
+ E' ?5 z( E4 n3 f: |# I$ U}1 _; c* v) Z. g/ r# N% ?1 G
}# o# i8 J8 V5 b2 a* t/ B1 \7 }
//---------------------------------------------------------------------------
% J* N* p$ D1 h+ Z+ N) M- rvoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,9 |6 H% ]6 s2 p/ S$ A3 x" p
      TShiftState Shift, int X, int Y)3 [( ^+ z% X; g2 T
{4 W& [8 L9 i- M+ N& J
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
3 r( K4 J, ^8 u3 w% \: e9 Q; Q: \9 D' qImage1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width++ G9 D" T- l, k. C# U  D) K4 ?
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;1 L$ N% ]3 l, R, x% f
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
! h/ }3 \& f3 IImage1-&gt;Top=Shape1-&gt;Top;
4 p/ S1 x5 C7 v/ T0 D/ ZShape1-&gt;Visible=false;
$ o( a( m2 ~4 `7 C. X" y, e& xImage1-&gt;Left=Shape1-&gt;Left;
* Z, S6 q- n8 {4 y) }: B1 q5 E}else{3 @& J; Q3 z) l0 L; V/ ^; G# C
Image1-&gt;Left=ox;
0 d2 H/ C: x, h  [* EImage1-&gt;Top=oy;
0 K. V8 l3 s8 F7 m+ j7 z8 C' l  J, W}! l$ m$ \& O% q- L
}</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>$ R' u" p. ]2 y0 G, C
' Q% j9 {+ G* M$ t* x. N5 O
<>而且我要是定义 extern int ox,oy;</P>
9 ~" q  t  a& [6 [1 \* u<>[Linker Error] Unresolved external '_ox' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\UNIT1.OBJ</P>/ D2 p# n7 u) t( e) [) X
<>会有这样的错误信息</P></DIV>
2 G3 S3 I/ s$ ^/ u/ x, Z" X3 [) ?5 w<>当然了,这是声明ox是外部变量,而不是定义!</P>
作者: 小菜菜同学    时间: 2005-4-29 12:38
那还有什么方法使它变成全局变量吗?
作者: ilikenba    时间: 2005-4-29 14:48
你不如把这些变量放到一个类的成员里面!
作者: 小菜菜同学    时间: 2005-4-29 15:24
<>1、1、1、1、
- c# n! Y: j* ], D//---------------------------------------------------------------------------</P><>#include &lt;vcl.h&gt;+ l: u4 r& u# p$ ?$ H* B* z) @
#pragma hdrstop</P><>#include "Unit1.h", o, r% A8 m4 t' s4 Q0 _
//---------------------------------------------------------------------------
$ A" p! O. E! P8 H) f! g#pragma package(smart_init)
/ N& B( P$ [  ]9 Y; O#pragma resource "*.dfm"
1 L1 e% X9 {$ T+ x, k) g/ u; RTForm1 *Form1;
  b+ ], M9 X, F: @/ `5 ]//---------------------------------------------------------------------------
- D/ B6 X  W5 F& n8 b5 `4 W7 F8 q  u__fastcall TForm1::TForm1(TComponent* Owner)+ K' `) G: g  W. P$ S
        : TForm(Owner)
7 ]) Q8 H9 m  P  _{
5 z) M, ^+ K9 O- J  J! [! r}$ q$ g' l1 N2 t, C
//---------------------------------------------------------------------------- M9 _7 [' H( ~$ _* U
class cla{* K. d8 A; z- ?4 P* G* C. A
public:
7 o% b9 g" w4 t6 k3 Rint ox,oy;0 W& f- `5 J: @! s: |0 ]( v# a8 [
};
( ]8 U1 X) H% m+ |% l2 [! R( ~8 s) Pcla *a=new cla;4 x  a9 K7 I: a5 h; O: V3 S1 d
int x,y;0 f. \& f5 q  L
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
4 v  a- p  Q6 C) N      TMouseButton Button, TShiftState Shift, int X, int Y)
. x- O  L# x/ c4 v8 p$ r{' s+ V. c. W: j; a* p
if(Button=mbLeft){
- O8 f  G' j3 i0 C+ y1 O' \, ca-&gt;ox=Image1-&gt;Left;
# {3 ^9 }% N! H& c3 d" Q  W8 c# U9 Q1 Wa-&gt;oy=Image1-&gt;Top;. C; f) \7 h8 W" _/ Z2 S
x=X;" x1 y5 t5 b* b& U  t4 X9 c0 e
y=Y;
1 [# S3 {7 t- U1 ?}
" k; f4 K  d7 E' _# H}9 [3 s5 v. b: {, Y
//---------------------------------------------------------------------------1 u! L/ ~% v' G% G, I$ U
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
; R# b+ _9 Q. D' ^( u2 H      int X, int Y): e( p& j4 o( v! h
{
2 L7 H0 b* F; F% Bif(Shift.Contains(ssLeft)){. K0 B! j3 u  y" W, X7 L
Image1-&gt;Left+=X-x;' b7 |9 {3 m, B/ |7 A' _
Image1-&gt;Top+=Y-y;
( W2 p6 p6 o9 K# F- B& f1 N4 F}
: `, y$ O7 W% n: L8 I}
: X' Z% t9 f( ]  x, B7 u1 ^! `$ v//---------------------------------------------------------------------------5 m# |) l/ U2 R  ~+ C
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,- j/ a% T% D% G6 X
      TShiftState Shift, int X, int Y)/ h9 K* d! f4 b0 d( r+ P
{
$ a: @- B8 N# f- D+ R* z+ T& O+ u if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
5 D/ a3 Y6 X0 k7 i6 F9 f8 yImage1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+
1 Z- a+ P# c' N+ T8 {/ O+ P20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;& O" K+ C" B& j) p) j( I3 i
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
7 i4 {6 C% S1 P8 G4 h) FImage1-&gt;Top=Shape1-&gt;Top;
, G5 f- S2 h7 |% G/ y! RShape1-&gt;Visible=false;
8 l7 C6 m: X3 W6 y% E- JImage1-&gt;Left=Shape1-&gt;Left;2 b7 q3 H  w  v8 y! Q7 S3 _/ ?
}else{
; O" a6 ?) l4 K3 h9 R( gImage1-&gt;Left=a-&gt;ox;( w5 d* C9 k/ N/ r" P+ k
Image1-&gt;Top=a-&gt;oy;& g( U7 u8 k7 K" ]% j& L5 N- p9 _
}
7 t" z; w4 A; p8 o) S  @9 i( `}</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;6 o1 ]9 p$ C* |6 b+ N7 N( R
#pragma hdrstop</P><>#include "Unit1.h"
  V8 k; X0 `: l4 d, ~3 V7 L//---------------------------------------------------------------------------! X, ^5 m) s, R8 k" w
#pragma package(smart_init)
, o( l- e: n- b) J2 p#pragma resource "*.dfm"
( y) j& Y9 Y! f# i+ L9 eTForm1 *Form1;
- B- k; x& D* i3 r" |/ ]//---------------------------------------------------------------------------
" k+ Z- ]& H# R* l1 i0 Y0 [__fastcall TForm1::TForm1(TComponent* Owner)- W% W3 L" b' f/ O& @  q
        : TForm(Owner)
$ I% ?7 b! M5 ?8 B{
1 w& v# l; J, _( {3 v}1 o3 r1 o0 E, c6 p. U. Y- O
//---------------------------------------------------------------------------4 V4 Y- q2 o8 v0 Y
class cla{1 D% V, O3 Z: O
public:  ]; X- g7 S9 ?
int ox,oy;; z6 w* `4 A5 ?0 Y
int get_x(){return ox;}
$ _/ `; \5 b$ c( U* s# yint get_y(){return oy;}
6 b( B7 ~7 Y7 I- U) b' `, M' Z/ x" t" A- y};, G' |( s' H& G, y8 T: P. @3 F" N2 v: A
cla *a=new cla;
9 W3 p) f! e, X6 O1 v. [int x,y;* _8 C& m- ^( m9 b
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
! p8 @4 B/ e0 _# F0 Y      TMouseButton Button, TShiftState Shift, int X, int Y)2 [5 L" l/ p# {$ j8 Y
{
" P# q1 }+ h0 w. @ if(Button=mbLeft){' i& U5 c+ ~# c: }% e
a-&gt;ox=Image1-&gt;Left;
! y# _- K, |( W0 A: O- La-&gt;oy=Image1-&gt;Top;
8 v1 n/ T9 d7 U4 ?x=X;
8 i, f. h( u6 Xy=Y;, b3 u6 R3 ?. \; R. Y; [  M7 k8 Q
}
! |4 W0 w9 o$ }3 P. T8 g}
! A: `3 V: k. Q, ]9 X, U1 `4 w//---------------------------------------------------------------------------5 }& j8 b! m* T7 n
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
: d8 Z5 t5 ]+ z- s) h5 r      int X, int Y)
5 x! L( d4 H% \/ s# s{
4 h. R6 T# Z2 `7 r9 R# Xif(Shift.Contains(ssLeft)){
5 P4 s, i9 B" ^+ b% KImage1-&gt;Left+=X-x;% e+ J  e. a( P3 _2 Q2 }
Image1-&gt;Top+=Y-y;& t, _+ E5 b/ h. ^& N! w8 U
}
2 v' ?) |+ C# g# d& Q7 ^8 v}
0 i  f. l/ E) w//---------------------------------------------------------------------------
: s( }2 \7 Z; B* Y3 ?void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,8 e2 \  J9 a: s! f, W6 K! F
      TShiftState Shift, int X, int Y)
$ P2 z* c! X) w* p) O{# _4 m) Q( K8 n* s! K; Y
int x1,y1;: I) d0 U/ b: S
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;$ `! N! @5 k& g2 S% x; Z) b8 k
Image1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+3 N* J, t+ \: X) T  P, }- T* \
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;* F; S- }; B" X/ f1 }0 L' v
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
. Z5 I/ t1 W9 S5 M, z: tImage1-&gt;Top=Shape1-&gt;Top;- U& O- B3 d* E. W3 a) S2 o
Shape1-&gt;Visible=false;
0 q0 h3 C" Z$ _, l* k* b3 a0 QImage1-&gt;Left=Shape1-&gt;Left;/ p) {. ?" \& A* K& g; f( |  g" \* W
}else{
/ F7 E# ~+ j  Gx1=a-&gt;get_x();9 y1 T, [  b. F* u
y1=a-&gt;get_y();
  d* C/ H3 ?  S7 u! N+ J+ ]) IImage1-&gt;Left=x1;
. J2 e  h7 I4 V/ q9 }) s3 ?0 PImage1-&gt;Top=y1;
+ E' q* k) P6 r) J! H' D}1 Z/ O) Z: s$ b
}</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;: u# F$ Q. I2 s; N! F
int x,y;7 K3 K8 O! d/ }. d
void __fastcall TForm1::Image1MouseDown(TObject *Sender,9 {2 H: L7 d& U$ K0 {
      TMouseButton Button, TShiftState Shift, int X, int Y): A. O" v6 \5 X
{
  R1 j: @( k% g) ]& U5 G! _1 E if(Button=mbLeft){" d5 V) f' x$ m) a
ox=Image1-&gt;Left;
" @' N& R1 A% v& s9 L* Goy=Image1-&gt;Top;8 F; j1 d) Q6 z- l) G+ ~7 Z
x=X;
4 g9 ?) Q* E6 N4 [5 wy=Y;
3 |  k' n' U: D8 z( z}: T  b  [1 }- @# Z. n, x9 T
}
1 y  P1 ^2 x3 r$ {) ?6 H5 S//---------------------------------------------------------------------------3 M3 E' q7 u( q& g. b/ s
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,/ w" V, p, D. q/ I1 w
      TShiftState Shift, int X, int Y)0 {; m8 h2 Z) U1 g0 Y& X
{
3 a1 `2 {, t1 t: mint x1,y1;</P><>x1=ox;$ G) F! s: B3 ~- A6 [5 w$ p
y1=oy;6 b' z, d  b& w$ u
ShowMessage("ox="+IntToStr(x1) +"oy="+IntToStr(y1) );9 N# Z# O/ P: L, @/ ]
}</P>
作者: 小菜菜同学    时间: 2005-4-29 15:42
<>重大发现:以下不是0。而加上if(Button=mbLeft){就为零了。病根找到了,但怎么回事呢?</P><>int ox,oy;1 Q1 |# I! d' H# @! P  N$ {: v
void __fastcall TForm1::Image1MouseDown(TObject *Sender,6 j0 Q" R8 ~6 g/ p/ D) T1 [  N
      TMouseButton Button, TShiftState Shift, int X, int Y)( d3 t9 U* }2 I  P
{9 i3 R1 r7 G! r* S
ox=Image1-&gt;Left;# U1 p" R3 }: J- x" k
oy=Image1-&gt;Top;/ f( N. x- X2 y  o
}; S4 Z3 d7 }- B* d0 J0 K* ^
//---------------------------------------------------------------------------
/ M0 R1 O0 w- J* u4 I* U% x) fvoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,7 y1 \5 h" K; ~' r) y% L. B
      TShiftState Shift, int X, int Y)4 y5 T4 R- M. Y$ F
{
3 N  l3 P  l5 G7 }2 D( _2 [ShowMessage("ox="+IntToStr(ox) +"oy="+IntToStr(oy) );
9 P% Y$ _. s  |/ R/ p+ D( @}</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><>
2 }& x4 B- e( J少校 的指导</P><>3、熟悉了全局变量的用法</P><>4、让我花1个小时想想4是什么,还有5....  (3、4个小时可不能白费呀......4是什么呢?伤脑筋呀)
% ?: x, x) ]3 u/ Y* t
6 s' T/ w0 P( e. s, V9 l4 s' k' ^</P>




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