作者kkroy (☆㊣↖煞氣ㄟ阿喂↘ξ★)
看板C_and_CPP
標題[問題] 亂數設SEED
時間Fri Jan 29 17:08:27 2010
我用的編譯器是 VS 2008
寫rand seed第一行compile就過不了,請大家指教:
#include<iostream>
using namespace std;
#include<stdlib.h>
#include<stdio.h>
#include"rand1.h"
#define SEED -2
double rand1(long *idum); //// rand1(.) 內容略 ////
long *idum;
idum = (long *)malloc(sizeof(long));
*idum = SEED;
int main(){
for(int i = 0; i<20; i++)
cout<< rand1(idum)<<endl;
system("pause");
return 1;
}
錯誤顯示:
error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int
error C2040: 'idum' : 'int' 和 'long *' 的間接取值層級不同
error C2440: '正在初始化' : 無法由 'long *' 轉換為 'int'
沒有可以進行此轉換的內容
error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int
error C2371: 'idum' : 重複定義; 基本型別不相同
error C2440: '正在初始化' : 無法由 'int' 轉換為 'int *'
從整數類資料型別轉換為指標型別必須有 reinterpret_cast、
C-Style 轉換或函式樣式轉換。
感覺我沒寫錯,一直說型態不對,
如果改成如下:
long idum = SEED;
然後 呼叫時 寫: rand1(&idum)
竟然就可以了?!!!!
也就是說我不用動態記憶配置,型態就不會錯? 怎會這樣?
請高手指點! 謝謝大家!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.144.18
→ loveme00835:我記得全域只能有定義跟宣告, 不能有其他敘述 01/29 17:13
→ james732:idum = (long *)malloc(sizeof(long)); 這行放錯地方了 01/29 17:14
推 QQ29:改成long *idum = (long *)malloc(sizeof(long)); 01/29 17:58
→ QQ29:*idum = SEED; 寫在main裡面 01/29 17:58
→ kkroy:噢~可以了耶! 原來如此! 01/29 18:02
→ kkroy:所以說在全域中不能呼叫malloc嗎? 01/29 18:02
→ kkroy:QQ29 你說的不行唷! malloc不能放在全域 01/29 18:04
→ kkroy:不過我很好奇,為什麼malloc不能放全域? 01/29 18:05
→ akasan:QQ29講的沒錯阿。。。 01/29 18:07
→ kkroy:抱歉! QQ29沒錯! 我搞錯了! 謝謝大家! 01/29 18:09
→ QQ29:你原本寫的算是assign 改成這樣算是initial 01/29 18:19