作者A1pha ([αλφα])
看板Visual_Basic
標題[VB6 ] 宣告 我還是沒搞清楚 囧
時間Mon Dec 22 19:56:15 2008
話說,
最近把一年多前寫的程式拿出來翻修,
結果不知道怎麼搞的,
以前沒問題的地方出了問題了@@"
就是執行到某的FUNCTION的時候,會出現ByRef引數型態不符。
於是我重新查了一下變數型態,
發現奇怪的問題@@"
我原本在 一般區 宣告 這裡宣告的變數,
用「區域變數監視視窗」來看,都變成Variant/XXXX這樣==
***
補:剛剛發現,我變數會變成Variant/XXXX的,都是在宣告非最末端的變數
例如下面例子中,我這樣宣告的時候,
用「區域變數監視視窗」來看,AnotherBianSu, criFix是Variant/XXXX
而SomethingElse是Single....
但是我有加強制宣告,為什麼Compile時會讓我過?==
應該說,明明就有宣告,而且也讓我過了,為什麼變數還是Viriant/XXXX...?
不知道是我這次修改程式的時候動到什麼東西了還是怎樣~
一年前寫的時候沒這問題@@"
--
我的例子是這樣:
我在一般宣告區:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Option Explicit
Private AnotherBianSu, criFix, SomethingElse
as single
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
然後寫了個Function:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Function Dice(Dice_type
as string,
option Fix_cri
as single=0)
as single
Select case Dice_type
case "a"
Dice=5*
Fix_cri+1
執行後這裡會被標起來說ByRef引數型態不符
'這時候監看變數的結果Fix_cri是Variant/Double,可能是錯在這。我引的是SINGLE
case "b"
Dice=10*Fix_cri+2
End select
End Function
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
然後有個程序要呼叫他:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Private Sub Command1_Click()
Dim X
as single
If !%$@#^
then
criFix = -0.05
Else
criFix = 0
End If
X = Dice("a", criFix)
'第一個引數A 或 B都一樣
End Sub
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
--
與其去懊悔做不到的事,
倒不如去做能做的事。
就算它和結果無關,
還是能夠往前邁進。
http://www.wretch.cc/blog/AlphaWing/24383501
From xxxHoLic vol.9
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.9.136.123
推 fumizuki:沒有接As 一律為Variant型態 寫在同一行也一樣 12/22 21:14
→ A1pha:是喔QQ 我常看到書上寫 Dim x, y as Integer大概那書在寫 12/22 21:23
→ A1pha:的時候沒有寫的很嚴謹== 謝謝大大XDDDD 12/22 21:23
→ A1pha:現在回想,我那程式之前居然跑得動運氣真的太好了QQ 12/22 21:25
→ MOONRAKER:這是一個很常見的謬誤, 可能來自其他語言的習慣, 如C等 12/23 16:57
→ MOONRAKER:到.NET才把這種多個變數宣告為同一type的寫法制式化 12/23 16:58
→ A1pha:嗯嗯QQ 我的確有學過C~常常會兩個搞混@@" 01/17 10:37