是这样的,第四,第五:
void * copyFile( void * arg )
{
struct dirent *ent = (dirent *)arg;
}
GCC 告诉我'dirent' undeclared (first use in this function)
。
在你问之前,争论是void *
因为它被传递给了一个 pthread,这正是我被教导这样做的方式,而且因为这是我第一次线程化(很痛),我只是按照我被告知的去做因为我在这里的理解充其量是薄弱的。
是这样的,第四,第五:
void * copyFile( void * arg )
{
struct dirent *ent = (dirent *)arg;
}
GCC 告诉我'dirent' undeclared (first use in this function)
。
在你问之前,争论是void *
因为它被传递给了一个 pthread,这正是我被教导这样做的方式,而且因为这是我第一次线程化(很痛),我只是按照我被告知的去做因为我在这里的理解充其量是薄弱的。
除非你typedef
有你需要的结构:
struct dirent *ent = (struct dirent *)arg;
正如 mux 所解释的,您需要使用
struct dirent *ent = (struct dirent *)arg;
我只是想弄清楚为什么你必须这样做。当您声明一个结构时,我们会执行以下操作之一
1.没有typedef
struct my_struct // <----- Name of the structure(equivalent to datatype)
{
int x;
int y;
} hello; // <------Variable of type my_struct
现在您可以使用以下方式访问:
hello.x=100;
可以使用声明一个新变量
struct my_struct new_variable; (new_variable is new variable of type my_struct)
2. 现在使用 typedef
typedef struct my_struct
{
int x;
int y;
} hello; //<----- Hello is a typedef for **struct my_struct**
所以当你这样做时
hello new_var; // <-------- new_var is a new variable of type my_struct
hello.x // <-------- Here hello refers to the datatype and not the variable
因此,变量 dirent 在不同的上下文中可能意味着不同的东西:-
如果您不提及该结构,编译器将假定它在 typedef 上下文中,因此会发现该变量未声明。
因此,您需要像 mux 所指出的那样直接提及它。