![](/img/trans.png)
[英]All functions and structs raise “implicit declaration of <function>” errors/warnings when used in main.c
[英]Implicit declaration of function with structs
我試圖通過在我的頭文件中創建原型函數來修復我最后一個函數的隱式聲明。 該實驗室將編寫結構,目前我有 Main.c、RandomNums.h 和 RandomNums.c。 我在 RandomNums.c 中的函數已經完成,但我不確定我應該如何在 RandomNums.h 中編寫它
下面是我的 RandomNums.c 文件,問題是 SetRandomVals 是 Main.c 中的隱式聲明
struct RandomNums SetRandomVals(int low,int high) {
struct RandomNums r;
r.var1= (rand() % (high -low + 1)) + low;
r.var2= (rand() % (high -low + 1)) + low;
r.var3= (rand() % (high -low + 1)) + low;
return r;
}
下面是我如何調用 SetRandomVals
RandomNums r = SetRandomVals(low, high);
我試過的原型是
SetRandomVals(int low,int high);
至於我的教授,我可能不會編輯 Main.c 文件。
編輯:添加函數原型后,我的新錯誤是我有一個未定義的引用,因為它已經聲明我有一個隱式聲明。
/tmp/ccOhjlhD.o: In function `main':
main.c:(.text+0x63): undefined reference to `SetRandomVals'
collect2: error: ld returned 1 exit status
原型應與定義中的函數頭相同: struct RandomNums setRandomVals(int low,int high)
。
它應該在任何調用者調用函數之前聲明。
返回類型需要包含在聲明中。
為此,您需要在.h
包含 struct 定義。
struct RandomNums { ... };
struct RandomNums setRandomVals(int low, int high);
順便說一句,您可以通過使用(可能是匿名的)結構來避免在任何地方使用struct
一詞。
typedef struct { ... } RandomNums;
RandomNums setRandomVals(int low, int high);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.