2012-03-04 7 views
2

私は基本的な問題があります。私は今、ポインタについて十分に知っておくべきです。私がそれを見る方法はconfigDataは(struct configの)リンクリストの最初のリンクですが、procNamesはstruct configのリンクリストの最初のリンクへのポインタです。ですから、procNamesがconfigDataと等しいと言いたいのであれば、私はconfigDataを指すポインタにアクセスする必要があります。これは*configDataです。とにかく私は何かが足りないと思う。誰もが問題を見ていますか?あなたはポインタABC。エラー:unary '*'の型引数が無効です( 'struct config'を持っています)

procNames = &configData; 

たい。これは、構造configDataのアドレスへのポインタprocNamesを設定invalid type argument of unary ‘*’ (have ‘struct config’)

struct config_line { 
    char name[MAX_WORD]; 
    int time; 
}; 

struct config { 
    struct config_line *lines; 
    int count; 
}; 

//global variable 
struct config configData; 
//local variable 
struct config *procNames; 
//the problem (done locally) 
procNames = *configData; 

答えて

3

私は思う:エラー:また、私は次のエラーを取得します。

lines自体ポインタであるので、あなたは、どちらか

procNames->count 
procNames->lines[i].name // Pointer to the 1st char of the name in the i'th config_line structure 

または

configData.count 
configData.lines[i].name 

がいることを忘れないでください使用して要素にアクセスすることができ、各config_line構造のためにメモリを割り当てる必要があります

struct config_line thisLine; // Declare a structure 
procNames->lines = &thisLine; // Point to it 

または

// Declare a pointer to an array of structures, allocate memory for the structures 
struct config_line *linePtr = malloc(NUM_STRUCTS * sizeof(struct config_line)); 
procName->lines[i] = *linePtr; // Points to 1st structure in the array 
+0

procName-> lines [i] = * linePtr? –

+1

@PaulKar。はい。良いキャッチ - ありがとう! –

2

は何をしようとするのあなたの説明に基づいて、(最後の行に& CONFIGDATAを書く)CONFIGDATAのアドレスを取得する必要があります。最後の行で何をしようとしているのは、configDataがポインタではないため(内部にアドレスを格納していないので)、コンパイラがあなたに許さない、逆参照のconfigDataです。

エラーメッセージはこれでかなり明確です。単項式*は引数として単一のポインタをとりますが、ポインタではなくstruct config型の引数が使用されます。

関連する問題