小菜菜同学 发表于 2005-4-29 10:23

我的bcb怎么在函数外声明的变量,在函数内无法存储

<P>我的bcb6怎么在函数外声明的变量,在函数内无法存储。也就是在一个函数中存后,无法在另一个函数中提取。若提取,则和没存一样等于零。</P>
<P>是我的BCB的设置问题吗?</P>
<P>如下中的ox,oy</P>
<P>int ox,oy;
int x,y;
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{ox=Image1-&gt;Left;
oy=Image1-&gt;Top;
x=X;
y=Y;
}
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
Image1-&gt;Left+=X-x;
Image1-&gt;Top+=Y-y;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
Image1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
Image1-&gt;Top=Shape1-&gt;Top;
Shape1-&gt;Visible=false;
Image1-&gt;Left=Shape1-&gt;Left;
}else{
Image1-&gt;Left=ox;
Image1-&gt;Top=oy;
}
}</P>
<P>最后ox、oy竟然都等于0。在mousedown中怎么没存上呢?</P>

ilikenba 发表于 2005-4-29 10:44

<P>道理上应该是全局变量,不会存不上的!是不是本身Image1-&gt;Left和Image1-&gt;Top的值就是0</P>

小菜菜同学 发表于 2005-4-29 10:59

<P>谢谢<b><FONT color=#000066>ilikenba的回答</FONT></b>,</P><P>不过Image1-&gt;Left和Image1-&gt;Top的值不是0,是不是我的BCB设置的问题?</P>

ilikenba 发表于 2005-4-29 11:43

我这里测试没有问题,应该是你的设置的问题!我这里都是默认的设置没有问题!

小菜菜同学 发表于 2005-4-29 11:58

怎么能恢复成默认设置呢?

ilikenba 发表于 2005-4-29 12:04

<P>project-&gt;option左下角有一个default的复选框!选中后点击确定!</P>

小菜菜同学 发表于 2005-4-29 12:17

<P>我恢复默认了,但还不行,我的全文是这样的,麻烦大侠再看一下:</P><P>int ox,oy;
int x,y;
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button=mbLeft){
ox=Image1-&gt;Left;
oy=Image1-&gt;Top;
x=X;
y=Y;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
if(Shift.Contains(ssLeft)){
Image1-&gt;Left+=X-x;
Image1-&gt;Top+=Y-y;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
if(Image1-&gt;Left&gt;Shape1-&gt;Left-20 &amp;&amp;
Image1-&gt;Left&lt;Shape1-&gt;Left+Shape1-&gt;Width+
20&amp;&amp;Image1-&gt;Top&gt;Shape1-&gt;Top-20&amp;&amp;
Image1-&gt;Top&lt;Shape1-&gt;Top+20+Shape1-&gt;Top){
Image1-&gt;Top=Shape1-&gt;Top;
Shape1-&gt;Visible=false;
Image1-&gt;Left=Shape1-&gt;Left;
}else{
Image1-&gt;Left=ox;
Image1-&gt;Top=oy;
}
}</P>

小菜菜同学 发表于 2005-4-29 12:27

<P>而且我要是定义 extern int ox,oy;</P><P> Unresolved external '_ox' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\UNIT1.OBJ</P><P>会有这样的错误信息</P>

ilikenba 发表于 2005-4-29 12:33

<DIV class=quote><B>以下是引用<I>小菜菜同学</I>在2005-4-29 12:27:12的发言:</B>

<P>而且我要是定义 extern int ox,oy;</P>
<P> Unresolved external '_ox' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\UNIT1.OBJ</P>
<P>会有这样的错误信息</P></DIV>
<P>当然了,这是声明ox是外部变量,而不是定义!</P>

小菜菜同学 发表于 2005-4-29 12:38

那还有什么方法使它变成全局变量吗?
页: [1] 2
查看完整版本: 我的bcb怎么在函数外声明的变量,在函数内无法存储