数学建模社区-数学中国

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

作者: 小菜菜同学    时间: 2005-4-29 10:23
标题: 我的bcb怎么在函数外声明的变量,在函数内无法存储
<>我的bcb6怎么在函数外声明的变量,在函数内无法存储。也就是在一个函数中存后,无法在另一个函数中提取。若提取,则和没存一样等于零。</P>
2 c- m" M( Z  u  M% I& q1 b$ Z<>是我的BCB的设置问题吗?</P>
' H1 k# n# E3 M, G<>如下中的ox,oy</P>
$ o5 t) @; ]$ _$ w6 ?7 {# s+ i<>int ox,oy;, m0 `& g' g% f6 @: w, S
int x,y;
% s" M: x0 V: V4 E7 [1 x" Z//---------------------------------------------------------------------------0 W) k. E0 |: D% k
void __fastcall TForm1::Image1MouseDown(TObject *Sender,! d/ G$ h9 V7 P; i
      TMouseButton Button, TShiftState Shift, int X, int Y)
- K: k) G- d" d' j% M$ v8 ]{ox=Image1-&gt;Left;
" \2 Z. w8 o2 V% I! @/ c: L7 G/ N- Noy=Image1-&gt;Top;
8 D6 p1 M7 p6 w9 x" {1 q. \x=X;
3 X' V" u  b8 x" R7 z* @y=Y;
, R* r! y7 r) D, W9 [- H! \0 ~' e, ?}
: \# \2 i9 l- jvoid __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
, R9 ~& G5 ^/ Y: l      int X, int Y)% j3 @9 x0 \1 X7 b% j7 H2 b) {$ l
{
; r' J' y6 a/ l% _3 uImage1-&gt;Left+=X-x;
. E$ |: @& h5 Z. f) t4 i4 QImage1-&gt;Top+=Y-y;
$ F9 Y8 w, d% M9 s}
5 n% K6 j' ~! F' D& p//---------------------------------------------------------------------------! K/ c" ]1 C4 u, _. `/ O1 b- ?. U
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,' @3 {; v+ J, n& v$ m. a
      TShiftState Shift, int X, int Y)
4 e, ~) _$ d8 o; y/ b6 k2 S' `5 D{, T9 M# \8 `" _! j6 X2 e4 }, U  ^
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;2 `  o6 [4 X# D
Image1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+& R8 B3 O/ F: f
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;
( n. E5 [0 n( s$ k1 ^) J( B, z Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
5 V. B, O/ s* @% DImage1-&gt;Top=Shape1-&gt;Top;; g/ A! V" i/ {
Shape1-&gt;Visible=false;0 k! A9 \- T3 ?0 Y
Image1-&gt;Left=Shape1-&gt;Left;3 T, Z3 w# Y3 W
}else{, h- w  J: q5 C/ n2 U  J# |
Image1-&gt;Left=ox;
$ W. `/ u$ ~% i) f; JImage1-&gt;Top=oy;
# c9 `. r( A- R' R. C}% }; o+ u# M' B
}</P>
/ A( ^+ x- W- ~$ y( x! T- ]<>最后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;
: c$ _" m, R6 |" C7 oint x,y;1 F* R* w& Z* I# A& \1 S
void __fastcall TForm1::Image1MouseDown(TObject *Sender,& {3 h! ]8 L# v: Q# L! Z
      TMouseButton Button, TShiftState Shift, int X, int Y)
; g7 X# K' u4 f; Z. d{3 g/ e3 Z# f2 z4 o8 K& f
if(Button=mbLeft){% u# m' @  u% L6 h' H8 t1 C/ @  n
ox=Image1-&gt;Left;
. \! i) f+ X9 J6 q& ~  Uoy=Image1-&gt;Top;
+ W: `6 h( x- J7 l& E" H5 s6 `x=X;
& B( s$ _$ x* a* w2 Dy=Y;9 A, Y  N' d2 ?2 l2 I( {
}
' |) Z5 G8 U: D: [}2 U# t% D0 f9 Z1 I' `# N* v$ r/ ^: N# K
//---------------------------------------------------------------------------0 }# \6 k! C: n* S, n7 n* N7 U
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,4 I1 z2 G! A3 Q. }. Z. H
      int X, int Y)$ j) x# P5 v  M- ]9 t1 {, ~6 l
{
7 C4 q) O7 |& N' ^% gif(Shift.Contains(ssLeft)){3 ^3 O4 L, f* T' O6 _. O( Z5 }/ j% u
Image1-&gt;Left+=X-x;4 o0 ?0 i/ x$ C- `+ k2 h; O
Image1-&gt;Top+=Y-y;8 Y+ K! Q) C0 P( q) f2 Q( b
}
/ j  |: U; H" U1 t. h/ U7 E}. _0 [' [# B( c2 _4 \
//---------------------------------------------------------------------------
" {( D+ ]  B. M, f% p% bvoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,1 \/ u7 x$ `7 W$ P: y; r
      TShiftState Shift, int X, int Y)+ h5 G) A8 H* n$ T8 b" }0 e
{
* m6 W# i% t2 ~# f' gif(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
& c1 B! n! H( k; w% jImage1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+! c2 I$ h( q0 `- s% j
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;
; N$ L1 r! y4 x1 d0 q% l Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
. @* B3 m& J  D* @* ?Image1-&gt;Top=Shape1-&gt;Top;
, q; H" n6 ^  P, ?! }0 V  ~Shape1-&gt;Visible=false;& n; g- n; N6 {" o& w
Image1-&gt;Left=Shape1-&gt;Left;8 s% n# R8 }  E7 P* w
}else{
! K1 o5 F+ ?/ ?, ?# W! jImage1-&gt;Left=ox;& h$ p8 |! ?# F8 ]# A
Image1-&gt;Top=oy;" i6 H& q$ n9 I" V4 S. x" w5 ?
}& y1 B5 I& Z& A7 Y& x
}</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>
8 M9 m, Z9 o; {7 R5 n: w. t4 a/ i0 W- w+ ]  G
<>而且我要是定义 extern int ox,oy;</P>$ f8 r9 H4 t% F2 q
<>[Linker Error] Unresolved external '_ox' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\UNIT1.OBJ</P>
: i& C$ C& m( Y& q# t1 h<>会有这样的错误信息</P></DIV>
+ o: _5 {5 f2 S" j/ A<>当然了,这是声明ox是外部变量,而不是定义!</P>
作者: 小菜菜同学    时间: 2005-4-29 12:38
那还有什么方法使它变成全局变量吗?
作者: ilikenba    时间: 2005-4-29 14:48
你不如把这些变量放到一个类的成员里面!
作者: 小菜菜同学    时间: 2005-4-29 15:24
<>1、1、1、1、, }; s9 Z$ a, |+ G) G) Z# _8 u
//---------------------------------------------------------------------------</P><>#include &lt;vcl.h&gt;6 {  b0 ?; ~3 E4 p2 j
#pragma hdrstop</P><>#include "Unit1.h"
/ x+ k0 p5 e+ Y; i0 R( O$ o//---------------------------------------------------------------------------
- M, i/ ~  _( d#pragma package(smart_init)
& }* ]+ r8 R: h3 P" y#pragma resource "*.dfm"; f8 L! G: f$ ?# H. s! b; @
TForm1 *Form1;
) v- {2 x5 X6 j+ H' ^//---------------------------------------------------------------------------
& F8 B  R& W2 [! [2 I__fastcall TForm1::TForm1(TComponent* Owner). o9 j2 n9 T& }5 H+ G) B7 m8 G
        : TForm(Owner)
$ E( B$ }* |# I4 j, r/ w{
  |+ Q+ d6 h( A6 ^* S- F5 [2 W5 [}, s; h3 T$ h" t5 V* u+ q0 |; H- ]' L
//---------------------------------------------------------------------------% }! _! {' O4 d
class cla{; S0 S+ ]* L7 o! M' m
public:
) y3 c" L; f' S4 @( L2 Hint ox,oy;
! L7 G% Z# @% `. B5 @};) k+ D( l3 c" H# {5 p" d
cla *a=new cla;% L( {! m  Z- [3 Y% f* i9 M2 U
int x,y;
# G9 P6 a5 _2 ?void __fastcall TForm1::Image1MouseDown(TObject *Sender,
1 J$ C, F& f" n) y" H* P/ C7 P      TMouseButton Button, TShiftState Shift, int X, int Y)+ r! N9 b$ ?/ @5 F0 ^2 W
{  M! b! s1 `9 R6 g* t4 \0 h
if(Button=mbLeft){# d6 s  c3 E$ c! O" ~
a-&gt;ox=Image1-&gt;Left;
4 a# n  q' k5 a0 k: \  r/ ?3 Qa-&gt;oy=Image1-&gt;Top;# D% @0 A1 \& d+ \" x
x=X;
$ U" Q; o2 b8 by=Y;2 P: M7 w! \3 F: G
}
% ^. J9 L' X7 P}1 |- L, x5 t* T" \: `
//---------------------------------------------------------------------------1 Z$ B# O' C) M4 U) t
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,9 u  m2 u$ ~6 ^
      int X, int Y)
* B) S8 m3 ]+ T" Q/ ?" {4 Z{9 y* S3 Q7 K. q3 E
if(Shift.Contains(ssLeft)){
& r4 k+ j* d+ b) d( yImage1-&gt;Left+=X-x;
- G2 X: T5 d8 X1 R3 S9 O% ]Image1-&gt;Top+=Y-y;
& k: ]  f" a% j" d}% B! w5 H0 @/ s7 Y( v  a
}
! e4 V0 z8 X& F3 u: L//---------------------------------------------------------------------------
$ B2 I7 i7 F4 q: Y  b8 N# Cvoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,5 j7 I4 o' V2 h! u, j
      TShiftState Shift, int X, int Y)2 j, d3 u, {% p" @1 T) s
{0 Z& Z. o) s' B, C! e; E
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;% Z  T) q1 I2 l/ N* I* g0 [
Image1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+# c+ ]( @) |# M  L% p
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;
% ], _/ l8 n1 m; ` Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){2 P3 ?% e. k5 d' y: P# I
Image1-&gt;Top=Shape1-&gt;Top;
3 j6 B4 @: F9 d5 R! c/ sShape1-&gt;Visible=false;
/ U# W' v+ O" K6 K8 qImage1-&gt;Left=Shape1-&gt;Left;( K3 t; l1 {9 P" v: |' `& Q* g  W
}else{
9 v1 G) r  T) L& b1 k- CImage1-&gt;Left=a-&gt;ox;
, r7 }) B. |( Z' i7 E5 nImage1-&gt;Top=a-&gt;oy;
$ H7 B9 V1 h* Y1 q}
& g3 i" g& e3 E8 `}</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;
" ~' L: E. Y4 H! c3 c+ r# S& q#pragma hdrstop</P><>#include "Unit1.h"( p1 m( |2 ~, U- U' E
//---------------------------------------------------------------------------) V6 p7 W' O0 d+ T
#pragma package(smart_init)
5 k, ~! E" m" O#pragma resource "*.dfm"
& N* `3 n* ~1 J0 ~5 E* v" uTForm1 *Form1;2 _9 G: _: S2 W% D. {# h; E, H
//---------------------------------------------------------------------------
- B/ Q4 N+ Z. l- Z. _1 o% j__fastcall TForm1::TForm1(TComponent* Owner)
, G, \' N' d2 k7 i" y        : TForm(Owner)
" B  o5 u4 N+ E. v; ]2 s1 q{
) Q% y8 A5 o* R' \! w4 E4 h+ J}
0 u0 t/ }8 ~7 ^! X" {//---------------------------------------------------------------------------
: M. R$ G) T, C" `7 F4 e8 zclass cla{4 J! ]+ d5 Z' R, o* G3 K
public:
' `! G4 v5 z: P5 r( L% I! ]int ox,oy;7 h0 I4 i+ a& H, T# T
int get_x(){return ox;}
+ I2 S- X( K  y! z- E2 r5 t- dint get_y(){return oy;}4 f4 S, B7 o! w5 ^3 K: H, ?' L! s; |
};
& x5 G/ [/ Y, K5 U9 i" Z( A" X* {4 Ncla *a=new cla;& M  A' h. L& ]* x2 [- n! v; N
int x,y;
' v4 L- t# L5 A7 X6 Jvoid __fastcall TForm1::Image1MouseDown(TObject *Sender,
3 G. V2 D9 `+ L0 v; U      TMouseButton Button, TShiftState Shift, int X, int Y)
. b6 t& t, R: T& x{
  Y1 N! h$ l* P if(Button=mbLeft){
2 x: Q4 X  I3 Q7 Qa-&gt;ox=Image1-&gt;Left;
1 v  q- e( X* t: q' P& w# ra-&gt;oy=Image1-&gt;Top;
7 J0 [4 s  e0 I- S6 y, Bx=X;
) {7 H( _& P: t2 w2 V- [y=Y;
! l- n* _9 p9 Q! o4 r6 m& _: @}+ H1 j5 {* O9 M, Z3 N0 Y+ l
}
' n9 H4 M5 V8 T: q//---------------------------------------------------------------------------
. r1 m6 v/ \; Zvoid __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
* p$ b; {% `& k8 W# @      int X, int Y)
* ~/ W; g1 S- ^. ?8 E{
! [( z, L# G6 b; q# u8 c2 Cif(Shift.Contains(ssLeft)){# J* {4 \# i: y) ?; O
Image1-&gt;Left+=X-x;
# S/ k7 a- S# W( `* ~+ Z( MImage1-&gt;Top+=Y-y;& `' C# o- _4 [( z
}+ N+ v0 k  l5 \6 j3 i
}. }* S# u; h9 l8 ^1 X
//---------------------------------------------------------------------------
* N3 G# e, S: J  F  N& K4 ?void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
$ U' T8 \; x+ ?4 P      TShiftState Shift, int X, int Y)$ ~( l6 R# ]! s
{- \5 ~! f" `: S) M2 c  U; S1 G) n
int x1,y1;* Z; K# W3 q" A% x2 [
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
: y; [' _8 y/ }9 b0 Q7 bImage1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+
3 x9 G- x) L7 f) t, @9 P20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;( ~/ c  v, i- n. k! N
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
) H3 \* q; @7 R; }* o& vImage1-&gt;Top=Shape1-&gt;Top;9 U: x$ S% c+ y5 H  z
Shape1-&gt;Visible=false;4 I/ x/ w" R% E: c- ~, N, H- ?
Image1-&gt;Left=Shape1-&gt;Left;
# J4 E. [7 v, K3 f% @}else{$ M$ J/ P9 l1 r2 C' s7 w0 f8 [
x1=a-&gt;get_x();
& u2 }; W" Z2 b% z- g/ L! sy1=a-&gt;get_y();
/ S9 w4 v% J; U5 HImage1-&gt;Left=x1;
) v( x" }- G2 z" ~: y: d6 y4 ^Image1-&gt;Top=y1;) ^$ R6 u  G( P+ a/ u0 v& m3 k$ x
}; Q" y8 N# m% \" m( D1 ~
}</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;
+ c9 C7 W$ n/ Cint x,y;
' j* }, y1 b8 @5 z0 ^void __fastcall TForm1::Image1MouseDown(TObject *Sender,. F+ x! F8 a; F% @# a& z
      TMouseButton Button, TShiftState Shift, int X, int Y)8 T: i/ [4 o6 @. P' {1 _
{+ r# d1 s  M2 N
if(Button=mbLeft){
# s  Y; U' M8 `" P5 x( a2 Hox=Image1-&gt;Left;
5 N! {9 T  f: B/ _4 ]5 Toy=Image1-&gt;Top;' x6 F( Z0 h. v% b9 o$ H
x=X;" O+ I9 S7 k. Q/ k- V
y=Y;
: P9 f- b' F# l; j0 A1 f0 W- ?}9 n0 D4 z) [9 [! `8 ^
}
" h. ?( u0 z, ?  x//---------------------------------------------------------------------------  H0 s1 i+ E1 p/ z. ^8 {% D
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
% M: w% H+ q) }1 G" N+ @! E      TShiftState Shift, int X, int Y)
/ e9 _: ]4 `) c. e- `: p{/ h" F8 k3 \, e1 h0 U; [
int x1,y1;</P><>x1=ox;8 h* \1 _& b$ o; E! Q
y1=oy;
( f7 ^  z# F: F7 c4 TShowMessage("ox="+IntToStr(x1) +"oy="+IntToStr(y1) );
* B1 p! d8 }( p2 f}</P>
作者: 小菜菜同学    时间: 2005-4-29 15:42
<>重大发现:以下不是0。而加上if(Button=mbLeft){就为零了。病根找到了,但怎么回事呢?</P><>int ox,oy;$ @4 z4 u0 s  f/ H9 r$ m* @- }
void __fastcall TForm1::Image1MouseDown(TObject *Sender,9 G1 S' ^. y1 w  R7 E; k2 ?% F
      TMouseButton Button, TShiftState Shift, int X, int Y)) ?# G$ L, f! S* _
{( s5 a5 y: X! W$ r5 |
ox=Image1-&gt;Left;+ s( b' B/ z- g4 H% S* c
oy=Image1-&gt;Top;+ t8 m, G7 y3 G4 P
}
& Z1 x! }" B$ J/ w0 s//---------------------------------------------------------------------------
8 v" {% ]6 V$ ]; j# i" tvoid __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
! G7 C: E, {) t: P4 W      TShiftState Shift, int X, int Y)' i% {2 t& Q6 I4 X" X
{
1 t5 J" I/ o0 O3 V0 y: g* L% `ShowMessage("ox="+IntToStr(ox) +"oy="+IntToStr(oy) );  C& A: _1 S5 I
}</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><>8 b; r+ `5 s' }
少校 的指导</P><>3、熟悉了全局变量的用法</P><>4、让我花1个小时想想4是什么,还有5....  (3、4个小时可不能白费呀......4是什么呢?伤脑筋呀)
" s7 @. }$ f/ ~- d% ]$ ^
( ]/ j" a, Z4 v* F2 ?( i- A" F" z' W</P>




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