質問: gene[i].tenor_c[j][gene[i].gene[j]%pai]; }//else }//else(2音目以降の決定のとこ) }//for(j=0;j
回答: 構造体の宣言がリストに含まれていないようなので、間違えている可能性がありますが、 私の推測を書きます。 ご参考になれば幸いです。 結論 == 原因 構造体 Gene に 'tenor','tenor_c' ,'tenor_candidate' という3つのメンバーが 定義されていない 解決方法 構造体 Gene の定義に 'tenor','tenor_c' ,'tenor_candidate' という3つのメンバーを追加する。 > > ※ご質問の内容から推測すると、 > > おそらく 'alto','alto_c' ,'alto_candidate' というメンバーがすでに存在しているはずなので、 > > それを参考にすればよいでしょう。 > > > 説明 == ご質問の >'Gene' has no member named 'tenor' / 'tenor_c' / 'tenor_candidate' をGoogle 翻訳にかけると > > 'Gene'には 'tenor' / 'tenor_c' / 'tenor_candidate'という名前のメンバーがありません > > > となります、 宣言している記述を見つけることができませんでしたが、 配列 gene がおそらく、構造体 Gene の配列として宣言されているはずです。 ご質問のリストの中には、gene の構造体メンバとして 'tenor','tenor_c' ,'tenor_candidate' にアクセスしている記述があります。 これらの箇所でアクセスしているにもかかわらず、構造体 Gene の宣言には これらのメンバがないため、このようなエラーが出ていると推測します。 ``` //初期化 for (i = 0; i < PopSize; i++) { for (j = 0; j < music.SNum; j++) { gene[i].tenor[j] = 0; } } ``` ``` /******************音の高さの候補を最終決定する*****************/ for (k = 0; k < 12; k++) { if (gene[i].tenor_candidate[j][k] > 0) { //printf("gene[%d].tenor_c[%d][%d]:",i,j,m); //ここで音の最終候補を入れる gene[i].tenor_c[j][m] = gene[i].tenor_candidate[j][k]; //printf("%d ", gene[i].tenor_c[j][m]); //tone_to_abc(gene[i].tenor_c[j][m]); m++; //入れた音の高さをカウント }//if(gene[i].tenor_candidate[j][k]>0) }//for(k) ``` ``` //各個体の始めの遺伝子の時 if (j == 0) { //printf(" [SNum(j):%d][d_chord[%d]:%d]_[tone2[%d]:%d]_[Bass_tone[%d]:%d]\n",j,j,d_chord[j],j,music.tone2[j],j,Bass_tone[j]); for (k = 1; k < 5; k++) { for (l = 0; l < 3; l++) { //12 * 1~5 + diatonic[d_chord[0]][l]と一致させる gene[i].tenor_candidate[j][n] = OctaveNum * k + diatonic[d_chord[j]][l]; //確認用表示 //printf("%d ",gene[i].tenor_candidate[j][n]); //音域外の候補を0にする //ソプラノパートより大きい音、バスパートより小さい音を0にする if (gene[i].tenor_candidate[j][n] < 12 || gene[i].tenor_candidate[j][n]>33 || music.tone2[j] <= gene[i].tenor_candidate[j][n] || Bass_tone[j] >= gene[i].tenor_candidate[j][n]) { gene[i].tenor_candidate[j][n] = 0; //printf("change"); }// if(音域外) if (gene[i].tenor_candidate[j][n] > 0) { //tone_to_abc(gene[i].tenor_candidate[i][n]); }//if(gene[i].tenor_candidate[j][n]>0) else { //printf("\n"); }//else n++; //nをカウントする }//for(l) }//for(k) ``` 補足 == 今回のご質問の内容に加えて以下の事項も記載されると、 より多くの人から回答を得られる可能性が上がると思います。 * コンパイルを行った環境(OS,コンパイラ) * コンパイラが出力したエラーメッセージの全て(無編集の全テキスト)