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

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

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

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

Q&A

解決済

2回答

23303閲覧

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

yu_89

総合スコア34

C

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

0グッド

0クリップ

投稿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

1#ifndef _MEDIAN_H_ 2#define _MEDIAN_H_ 3 4void swap(int, int); 5 6int partition(int, int, int, double); 7 8double select(int, int, int, double); 9 10bool is_odd_number(int); 11 12double get_median(int, double); 13 14#endif 15

median.c

1#include <stdio.h> 2#include <stdbool.h> 3#include "median.h" 4 5#define NR_ELEMENTS(a) (sizeof((a)) / sizeof((a)[0])) 6 7void swap(int *x, int *y) 8{ 9 int tmp; 10 11 tmp = *x; 12 *x = *y; 13 *y = tmp; 14} 15 16int partition(int left, int right, int pivot_index, double a[]) 17{ 18 int pivot_value, store_index; 19 int i; 20 21 pivot_value = a[pivot_index]; 22 23 swap(&a[pivot_index], &a[right]); 24 store_index = left; 25 26 for (i = left; i <= right - 1; i++) { 27 if (a[i] <= pivot_value) { 28 swap(&a[store_index], &a[i]); 29 store_index++; 30 } 31 } 32 33 swap(&a[right], &a[store_index]); 34 35 return store_index; 36} 37 38double select(int left, int right, int k, double a[]) 39{ 40 int pivot_new_index; 41 42 while (true) { 43 pivot_new_index = partition(left, right, k, a); 44 45 if (k == pivot_new_index) { 46 return a[k]; 47 } else if (k < pivot_new_index) { 48 right = pivot_new_index - 1; 49 } else { 50 left = pivot_new_index + 1; 51 } 52 } 53} 54 55bool is_odd_number(int n) 56{ 57 return n & 0x1; 58} 59 60double get_median(int n, double a[]) 61{ 62 int val, val2; 63 int k = n / 2; 64 65 val = select(0, n - 1, k, a); 66 67 if (is_odd_number(n)) { 68 return val; 69 } else { 70 val2 = select(0, n - 1, k - 1, a); 71 return (double)(val + val2) / 2; 72 } 73} 74

718.c

1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4#include <stdbool.h> 5#include "median.h" 6 7int main(int argc,const char *argv[]) 8 { 9 int N=1024; 10 int i,j,n,n_frame,iter,flag; 11 float ar[N],ai[N], Ar[N], Ai[N]; 12 double tempr[N],tempi[N]; 13 float fq; 14 double pwr,pwi; 15 double av[N],dcnt[N], Dcnt[i]; 16 double Kr[N],Ki[N]; 17 double Ksumr,Ksumi,Kavr,Kavi; 18 double sr,si,Sr,Si,s3r,s3i; 19 double S1[N],S1r[N],S1i[N],S2r[N],S2i[N],S3r[N],S3i[N],S4r[N],S4i[N]; 20 double Myu1r[N],Myu1i[N],Myu2r[N],Myu2i[N],Myu3r[N],Myu3i[N],Myu4r[N],Myu4i[N]; 21 double Mr[N],Mi[N],Fr[N],Fi[N]; 22 double Cop_S2r[N], Cop_S2i[N], Cop_Myu2r[N], Cop_Myu2i[N], Cop_av[N]; 23 double medianr, mediani; 24 double abs_Cop_S2r[N], abs_Cop_S2i[N]; 25 FILE *fp; 26 27 int fft1(); 28 int window_func(); 29 30        ・ 31        ・ 32        ・  33 34 for(i=0;i<N;i++) 35 { 36 pwr = ar[i]; 37 pwi = ai[i]; 38 39 S1r[i] = S1r[i] + (double)pwr; 40 S1i[i] = S1i[i] + (double)pwi; 41 42 S2r[i] = S2r[i] + pow((double)pwr,2.0); 43 S2i[i] = S2i[i] + pow((double)pwi,2.0); 44 45 S3r[i] = S3r[i] + pow((double)pwr,3.0); 46 S3i[i] = S3i[i] + pow((double)pwi,3.0); 47 48 S4r[i] = S4r[i] + pow((double)pwr,4.0); 49 S4i[i] = S4i[i] + pow((double)pwi,4.0); 50 51 dcnt[i] = dcnt[i] + 1.0; 52 } 53 } 54 55 printf("\n"); 56 fclose(fp); 57 58 medianr = get_median(N, *S2r);  // **median.cで定義した関数** 59 mediani = get_median(N, *S2i);  60 61         ・ 62         ・ 63         ・ 64 65

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_89

2022/06/17 06:15

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

2022/06/17 06:48

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

2022/06/20 02:38

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

回答2

0

宣言と定義の内容が一致していないからです。

たとえば宣言では void swap(int, int); としているのに定義では void swap(int*, int*); なので引数の型が一致していません。 一致するように修正してください。

投稿2022/06/16 07:08

SaitoAtsushi

総合スコア5542

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_89

2022/06/17 06:14

そういうことだったんですね。ありがとうございます!修正します。
guest

0

ベストアンサー

エラーメッセージのとおりです。ヘッダファイルと実装で、関数の引数の型が一致していません。

C

1// median.h 2void swap(int, int); 3 4// median.c 5void swap(int *x, int *y) 6// 後略

投稿2022/06/16 07:07

maisumakun

総合スコア145504

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/06/16 07:08

一例としてswapを書きましたが、他の関数についても同じです。
yu_89

2022/06/17 06:14

なるほど。そういうことでしたか。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.42%

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

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

質問する

関連した質問