0

我试图通过在我的头文件中创建原型函数来修复我最后一个函数的隐式声明。实验室是编写结构体,目前我有我的 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
4

2 回答 2

0

返回类型需要包含在声明中。

为此,您需要在.h.

struct RandomNums { ... };

struct RandomNums setRandomVals(int low, int high);

顺便说一句,您可以struct通过使用(可能是匿名的)结构来避免在任何地方使用这个词。

typedef struct { ... } RandomNums;

RandomNums setRandomVals(int low, int high);
于 2021-11-03T19:13:06.207 回答
0

原型应与定义中的函数头相同:struct RandomNums setRandomVals(int low,int high).

它应该在任何调用者调用函数之前声明。

于 2021-11-03T19:10:10.033 回答