- 締切済み
エラーについて
Cプログラミングについての質問です.よろしくお願いします. 以下のヘッダファイル(param.h header.h),および,mainファイル(以下はそのファイルの一部)が正しくコンパイルされるということなのですが,linuxでエラーがでます. エラー内容は error:redifinition of typedef 'gtype_t' error:previous declaration of 'gtype_t' was here です. <param.h> #define F_X pow((x),2)-2 /*探索する関数.関数への入力はx,関数からの出力はy*/ #define G_Y 1/(1+fabs(y)) /*関数の出力に対しての適合度.適合値は高いほどよいものと扱われる,f(x)=0が最良*/ #define GRAY 1 /*グレイ表現なら1,バイナリ表現なら1*/ /*GAのパラメータ群*/ #define MAX (0) /*扱う実数の最大値*/ #define MIN (255) /*扱う実数の最小値*/ #define LENGTH (8) /*遺伝子のコード長*/ #define POP (8) /*個体数*/ #define CODE_MAX 1 /*各遺伝子コードの最大値.これが1ならコードは0か1になる.ビット文字列の場合は1*/ #define GAP 0.7 /*一回の生殖で子供と入れ替わる割合*/ #define ELITE_RATE 0.8 /*そのまま残る数のうち,エリートの割合*/ #define P_MUTATE 0.13 /*突然変異率.LENGTHの逆数程度が良い.*/ #define P_CROSS 1.0 /*交叉確率*/ #define GENERATION 5 /*GAを計算する世代数*/ #define SELECTION_METHOD 1 /*1はルーレット,2はトーナメント*/ #define TOURNAMENT_SIZE 5 /*トーナメントサイズ.トーナメントのときだけ意味がある*/ /*出力*/ #define PRINT_GROUP 1 #define PRINT_FITNESS 1 <header.h> typedef int* gtype_t; typedef struct ga_individual* individual_t; struct ga_individual{ gtype_t gtype; /*遺伝子型 int配列の先頭ポインタ*/ double ptype; /*表現型*/ double fitness; /*適合度*/ individual_t next; /*線形リストでの次の個体*/ int rank; /*線形リストの中での順位(ソート後)*/ int parent1; /*交叉での親1のインデックス*/ int parent2; /*交叉での親2のインデックス*/ int cross_point; /*交叉したポイント*/ }; typedef struct ga_population* ga_population_t; struct ga_population{ individual_t genes; /*個体の線形リスト先頭へのポインタ*/ double *pselect; /*適合度の配列*/ int mutate_count; /*突然変異回数の合計*/ double max_fitness; /*適合度の最大値*/ double min_fitness; /*適合度の最小値*/ double avg_fitness; /*適合度の平均値*/ int population_size; /*集団の個体数*/ int code_length; /*遺伝子長*/ int code_max; /*各遺伝子座の最大値,ビットストリングの場合は1*/ }; <main> /*実数とバイナリ・グレイ表現への変換*/ /*与えられた実数に近い,ビットストリング型のgtypeを作る.*/ /*GRAY=1指定される時はグレイ表現に変換*/ /*最後の桁まで計算した後に残る端数切り捨て*/ typedef int* gtype_t; void encode_gtype(double value,gtype_t gtype,int code_length,double min,double max) { double gap = max-min; double remain_value = value-min; /*値のうち,遺伝子によって表現されている部分*/ double value_of_code; /*その桁の遺伝子が表現する値*/ int position = 1; int pre_code = 0; int i = 0; int tmp; /*グレイ表現変換用,一時保管変数*/ while (i<code_length){ value_of_code = gap/pow(2,position); if(remain_value >= value_of_code){ gtype[i] = 1; remain_value -= value_of_code; } else{ gtype[i] = 0; } /*グレイ表現への変換 バイナリ表現と,元のバイナリを右に1シフトしたもののXORをとる*/ if(GRAY == 1){ tmp = gtype[i]; gtype[i] = (pre_code) ^ (gtype[i]); pre_code = tmp; } position++; i++; } return; } 以上です. よろしくお願い致します.
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2127/6289)
>error:redifinition of typedef 'gtype_t' >error:previous declaration of 'gtype_t' was here このエラーが、何というファイルの何行目で出ていますか? ところで、提示された3つのファイルはお互いに独立していて、 何も関係がないように見えます。 いずれかのファイルからいずれかのファイルをインクルードしているというような 結びつきはありますか?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
なにがわからんのですか?