2

これは、4番目、5番目のようになります。

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 に答える