[問題] 亂數設SEED

看板C_and_CPP (C/C++)作者 (☆㊣↖煞氣ㄟ阿喂↘ξ★)時間16年前 (2010/01/29 17:08), 編輯推噓1(1010)
留言11則, 5人參與, 最新討論串1/2 (看更多)
我用的編譯器是 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

01/29 17:13, , 1F
我記得全域只能有定義跟宣告, 不能有其他敘述
01/29 17:13, 1F

01/29 17:14, , 2F
idum = (long *)malloc(sizeof(long)); 這行放錯地方了
01/29 17:14, 2F

01/29 17:58, , 3F
改成long *idum = (long *)malloc(sizeof(long));
01/29 17:58, 3F

01/29 17:58, , 4F
*idum = SEED; 寫在main裡面
01/29 17:58, 4F

01/29 18:02, , 5F
噢~可以了耶! 原來如此!
01/29 18:02, 5F

01/29 18:02, , 6F
所以說在全域中不能呼叫malloc嗎?
01/29 18:02, 6F

01/29 18:04, , 7F
QQ29 你說的不行唷! malloc不能放在全域
01/29 18:04, 7F

01/29 18:05, , 8F
不過我很好奇,為什麼malloc不能放全域?
01/29 18:05, 8F

01/29 18:07, , 9F
QQ29講的沒錯阿。。。
01/29 18:07, 9F

01/29 18:09, , 10F
抱歉! QQ29沒錯! 我搞錯了! 謝謝大家!
01/29 18:09, 10F

01/29 18:19, , 11F
你原本寫的算是assign 改成這樣算是initial
01/29 18:19, 11F
文章代碼(AID): #1BOgMEsN (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BOgMEsN (C_and_CPP)