質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

解決済

conflicting types forというエラーが出る。

yu_89
yu_89

総合スコア28

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

2回答

0評価

0クリップ

686閲覧

投稿2022/06/16 07:00

解決したいこと

C言語でプログラムを分割してコンパイルしようとしているのですが、conflicting types forというエラーが出てしまいます。

gcc -o 718 median.c 718.c -lmとしてコンパイルしています。

何が原因なのでしょうか。

発生している問題・エラーメッセージ

median.c:7:6: error: conflicting types for ‘swap’ 7 | void swap(int *x, int *y) | ^~~~ In file included from median.c:3: median.h:4:6: note: previous declaration of ‘swap’ was here 4 | void swap(int, int); | ^~~~ median.c:16:5: error: conflicting types for ‘partition’ 16 | int partition(int left, int right, int pivot_index, double a[]) | ^~~~~~~~~ In file included from median.c:3: median.h:6:5: note: previous declaration of ‘partition’ was here 6 | int partition(int, int, int, double); | ^~~~~~~~~ median.c: In function ‘partition’: median.c:23:8: warning: passing argument 1 of ‘swap’ from incompatible pointer type [-Wincompatible-pointer-types] 23 | swap(&a[pivot_index], &a[right]); | ^~~~~~~~~~~~~~~ | | | double * median.c:7:16: note: expected ‘int *’ but argument is of type ‘double *’ 7 | void swap(int *x, int *y) | ~~~~~^ median.c:23:25: warning: passing argument 2 of ‘swap’ from incompatible pointer type [-Wincompatible-pointer-types] 23 | swap(&a[pivot_index], &a[right]); | ^~~~~~~~~ | | | double * median.c:7:24: note: expected ‘int *’ but argument is of type ‘double *’ 7 | void swap(int *x, int *y) | ~~~~~^ median.c:28:12: warning: passing argument 1 of ‘swap’ from incompatible pointer type [-Wincompatible-pointer-types] 28 | swap(&a[store_index], &a[i]); | ^~~~~~~~~~~~~~~ | | | double * median.c:7:16: note: expected ‘int *’ but argument is of type ‘double *’ 7 | void swap(int *x, int *y) | ~~~~~^ median.c:28:29: warning: passing argument 2 of ‘swap’ from incompatible pointer type [-Wincompatible-pointer-types] 28 | swap(&a[store_index], &a[i]); | ^~~~~ | | | double * median.c:7:24: note: expected ‘int *’ but argument is of type ‘double *’ 7 | void swap(int *x, int *y) | ~~~~~^ median.c:33:8: warning: passing argument 1 of ‘swap’ from incompatible pointer type [-Wincompatible-pointer-types] 33 | swap(&a[right], &a[store_index]); | ^~~~~~~~~ | | | double * median.c:7:16: note: expected ‘int *’ but argument is of type ‘double *’ 7 | void swap(int *x, int *y) | ~~~~~^ median.c:33:19: warning: passing argument 2 of ‘swap’ from incompatible pointer type [-Wincompatible-pointer-types] 33 | swap(&a[right], &a[store_index]); | ^~~~~~~~~~~~~~~ | | | double * median.c:7:24: note: expected ‘int *’ but argument is of type ‘double *’ 7 | void swap(int *x, int *y) | ~~~~~^ median.c: At top level: median.c:38:8: error: conflicting types for ‘select’ 38 | double select(int left, int right, int k, double a[]) | ^~~~~~ In file included from median.c:3: median.h:8:8: note: previous declaration of ‘select’ was here 8 | double select(int, int, int, double); | ^~~~~~ median.c:60:8: error: conflicting types for ‘get_median’ 60 | double get_median(int n, double a[]) | ^~~~~~~~~~ In file included from median.c:3: median.h:12:8: note: previous declaration of ‘get_median’ was here 12 | double get_median(int, double); | ^~~~~~~~~~ In file included from 718.c:5: median.h:8:8: error: conflicting types for ‘select’ 8 | double select(int, int, int, double); | ^~~~~~ In file included from /usr/include/x86_64-linux-gnu/sys/types.h:179, from /usr/include/stdlib.h:394, from 718.c:2: /usr/include/x86_64-linux-gnu/sys/select.h:101:12: note: previous declaration of ‘select’ was here 101 | extern int select (int __nfds, fd_set *__restrict __readfds, | ^~~~~~

該当のソースコード

median.h

#ifndef _MEDIAN_H_ #define _MEDIAN_H_ void swap(int, int); int partition(int, int, int, double); double select(int, int, int, double); bool is_odd_number(int); double get_median(int, double); #endif

median.c

#include <stdio.h> #include <stdbool.h> #include "median.h" #define NR_ELEMENTS(a) (sizeof((a)) / sizeof((a)[0])) void swap(int *x, int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; } int partition(int left, int right, int pivot_index, double a[]) { int pivot_value, store_index; int i; pivot_value = a[pivot_index]; swap(&a[pivot_index], &a[right]); store_index = left; for (i = left; i <= right - 1; i++) { if (a[i] <= pivot_value) { swap(&a[store_index], &a[i]); store_index++; } } swap(&a[right], &a[store_index]); return store_index; } double select(int left, int right, int k, double a[]) { int pivot_new_index; while (true) { pivot_new_index = partition(left, right, k, a); if (k == pivot_new_index) { return a[k]; } else if (k < pivot_new_index) { right = pivot_new_index - 1; } else { left = pivot_new_index + 1; } } } bool is_odd_number(int n) { return n & 0x1; } double get_median(int n, double a[]) { int val, val2; int k = n / 2; val = select(0, n - 1, k, a); if (is_odd_number(n)) { return val; } else { val2 = select(0, n - 1, k - 1, a); return (double)(val + val2) / 2; } }

718.c

#include <stdio.h> #include <stdlib.h> #include <math.h> #include <stdbool.h> #include "median.h" int main(int argc,const char *argv[]) { int N=1024; int i,j,n,n_frame,iter,flag; float ar[N],ai[N], Ar[N], Ai[N]; double tempr[N],tempi[N]; float fq; double pwr,pwi; double av[N],dcnt[N], Dcnt[i]; double Kr[N],Ki[N]; double Ksumr,Ksumi,Kavr,Kavi; double sr,si,Sr,Si,s3r,s3i; double S1[N],S1r[N],S1i[N],S2r[N],S2i[N],S3r[N],S3i[N],S4r[N],S4i[N]; double Myu1r[N],Myu1i[N],Myu2r[N],Myu2i[N],Myu3r[N],Myu3i[N],Myu4r[N],Myu4i[N]; double Mr[N],Mi[N],Fr[N],Fi[N]; double Cop_S2r[N], Cop_S2i[N], Cop_Myu2r[N], Cop_Myu2i[N], Cop_av[N]; double medianr, mediani; double abs_Cop_S2r[N], abs_Cop_S2i[N]; FILE *fp; int fft1(); int window_func();         ・         ・         ・  for(i=0;i<N;i++) { pwr = ar[i]; pwi = ai[i]; S1r[i] = S1r[i] + (double)pwr; S1i[i] = S1i[i] + (double)pwi; S2r[i] = S2r[i] + pow((double)pwr,2.0); S2i[i] = S2i[i] + pow((double)pwi,2.0); S3r[i] = S3r[i] + pow((double)pwr,3.0); S3i[i] = S3i[i] + pow((double)pwi,3.0); S4r[i] = S4r[i] + pow((double)pwr,4.0); S4i[i] = S4i[i] + pow((double)pwi,4.0); dcnt[i] = dcnt[i] + 1.0; } } printf("\n"); fclose(fp); medianr = get_median(N, *S2r);  // **median.cで定義した関数** mediani = get_median(N, *S2i);           ・          ・          ・

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

yu_89

2022/06/17 06:15

何が競合しているのかよく分からなかったので、質問させていただきました。すみません。
episteme

2022/06/17 06:48

> 何が競合しているのかよく分からなかった conflicting 「types」と明記されています。「型の不一致」です
yu_89

2022/06/20 02:38

返信が遅れていまい、申し訳ございません。 なるほど。そういうことでしたか。ありがとうございます!

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。