2

是这样的,第四,第五:

void * copyFile( void * arg )
{
    struct dirent *ent = (dirent *)arg;
}

GCC 告诉我'dirent' undeclared (first use in this function)

在你问之前,争论是void *因为它被传递给了一个 pthread,这正是我被教导这样做的方式,而且因为这是我第一次线程化(很痛),我只是按照我被告知的去做因为我在这里的理解充其量是薄弱的。

4

2 回答 2

5

除非你typedef有你需要的结构:

struct dirent *ent = (struct dirent *)arg;
于 2012-11-18T06:54:53.077 回答
2

正如 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

现在您可以使用以下方式访问:

  1. hello.x=100;

  2. 可以使用声明一个新变量

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 所指出的那样直接提及它。

于 2012-11-18T14:16:26.147 回答