"参数有不完整类型"警告

Bel*_*lgi 7 c incomplete-type

我在C文件中有这个:

struct T
{
    int foo;
};
Run Code Online (Sandbox Code Playgroud)

C文件包含一个带有这些行的h文件:

typedef struct T T;
void listInsertFirst(T data, int key, LinkedList* ListToInsertTo);
Run Code Online (Sandbox Code Playgroud)

该函数listInsertFirst是我收到警告的函数.我该如何解决?

Jef*_*ado 2

正如我们在评论中发现的那样,问题在于 的定义发生在标头中struct T的定义之后。T你这里的事情确实倒退了。标头应该定义所有类型和函数原型,并且您的 C 文件应该使用它们。

相反,您想要做的是更改插入函数的签名以接收指向数据的指针和数据的大小。然后你可以为数据分配一些内存,复制并存储它。您不需要特定的类型,只需将其声明为void *.

void listInsertFirst(void *data, size_t data_size, int key, LinkedList* ListToInsertTo);
Run Code Online (Sandbox Code Playgroud)

然后调用者会做这样的事情:

struct T { int foo; };
struct T x = { ... };
int someKey = ...;
LinkedList *someList = ...;
listInsertFirst(&x, sizeof x, someKey, someList);
Run Code Online (Sandbox Code Playgroud)