看板 C_and_CPP 關於我們 聯絡資訊
我用的編譯器是 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