0

Cで構造体とtypedefを宣言する方法について、私は非常に混乱していると思います. 単純な型 (基本的に現時点では単なるベクトル) を宣言し、それをポインターで使用しようとしていますが、何かが非常に間違っており、エラーが発生し続けます (コマンドを含む他のコンパイラ出力が含まれています):

gcc main.c -o simulator -lm -Wall -std=c99
main.c: In function ‘main’:
main.c:20:3: error: incompatible type for argument 1 of ‘init_agent’
   init_agent(agent_list[i]);
   ^
main.c:9:6: note: expected ‘struct agent *’ but argument is of type ‘agent’
 void init_agent(agent *a)
      ^
make: *** [main] Error 1
[Finished in 0.0s with exit code 2]

私のコードは次のとおりです。

#include <stdlib.h>

typedef struct agent_s
{
    float x;
    float y;
}agent;

void init_agent(agent *a)
{
    a->x = (float)(rand()%100)/10;
    a->y = (float)(rand()%100)/10;
}

int main(int argc, char** argv)
{
    int agent_count = 10;
    agent* agent_list = malloc(sizeof(agent)*agent_count);
    for(int i = 0;i<agent_count;i++)
        init_agent(agent_list[i]);

    return 0;
}

私は一生、何が悪いのかを理解することはできません。私はすべてを正しく行ったと思いますが、エラーにより、型の宣言、または配列の宣言方法が間違っていると思います。

ちょっとした編集:私は疲れていて、おそらくあまり意味がありません-基本的に、C++オブジェクトに似たエージェント「オブジェクト」を作成し、それらを簡単に操作できるようにしたいと考えています。C++ しか使えないことはわかっていますが、C についてもっと学ぼうとしているので、少しごまかしているような気がします。

4

1 に答える 1

3

サブスクリプション オペレーターは[]ポインターを逆参照します。代わりに必要なのは

init_agent(&agent_list[i]);

または同等のもの

init_agent(agent_list + i);

つまり、構造体自体ではなく、リスト内のth 項目のアドレスです。i

于 2013-06-22T19:58:39.363 に答える