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

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

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

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Q&A

解決済

4回答

21927閲覧

コンパイルエラーが出ているが原因がわからない

kisara11235

総合スコア18

C

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

0グッド

0クリップ

投稿2020/06/21 03:08

編集2020/06/21 03:12

ラザフォードの散乱のプログラミングを書いているのですが、コンパイルエラーへの対処がわからないです。
特に、7,8,9,10行目で「 initializer element is not a compile-time constant」と出ます。
15行目で「note: 'g' declared here」と出ます。
24、25,26で「 too few arguments to function call, expected 4, have 2」と出ます。
プログラム初心者なので、よければエラーの原因と対処法を教えてもらいたいです。
コンパイルは「paiza.LO」のサイトで行いました。
よろしくお願いします。

C

1#include <stdio.h> 2#include <math.h> 3 4#define N 10 5 6double x=-2000, b=2000,y[N]={10,50,100,150,200,300}; 7double n,h,t,vx,vy,q=5.30*2,ma=6.664*pow(10,-27),M; 8 9double M=q/ma; 10double vx=pow(M,0.5); 11double n=40000; 12double h=(b-x)/n; 13 14 15double g(double x, double y, double ma, double r); 16 17int main() { 18 double i; 19 for(i = 0 ; i <=n ; i++) 20 { 21 double k1,k2,k3,k4; 22 23 t+=h; 24 k1 = g(t,vy); 25 k2 = g(t+h*0.5,vy+k1*0.5); 26 k3 = g(t+h*0.5,vy+k2*0.5); 27 k4 = g(t+h, y+k3); 28 vy = vy + (k1+2.0*k2+2.0*k3+k4)/6.0; 29 y=vy*t; 30 x=vx*t; 31 printf("%2f %f %f\n",t,x,y); 32 33 return 0; 34 } 35} 36 37double g(double x, double y, double ma, double r){ 38   double z=79,m=3.141592,e=8.854*pow(10,-12),r=sqrt(pow(x,2)+pow(y,2)); 39 40 g =2*z*z*y/(4*m*e*ma*pow(r,3)); 41 42 return(g); 43}

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

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

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

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

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

guest

回答4

0

ベストアンサー

特に、7,8,9,10行目で「 initializer element is not a compile-time constant」と出ます。

宣言と同時に初期化する場合の値は、コンパイル時に計算出来る物だけです。
当たり前ですが、pow()のような関数の呼び出しは、コンパイル時じゃなくて実行時に行われますので、書けません。

24、25,26で「 too few arguments to function call, expected 4, have 2」と

自分で、関数gを引数4つの関数であると宣言したのに、それを忘れて引数2つで呼び出そうとしているからです。
自分で書いたコードは、少なくともコードを書いている間は覚えていましょう。

15行目で「note: 'g' declared here」と出ます。

は、上記に付随しての情報です。

以上がコンパイルエラーについてですが、他の方の指摘にもあるとおり、他にも色々間違っています。
よく考えて書きましょう。書いたら読み直しましょう。

投稿2020/06/21 03:44

otn

総合スコア84505

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

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

kisara11235

2020/06/21 04:56

ありがとうございます。 教本を確認しながらもう一度作り直します。
guest

0

ma=6.664*pow(10,-27)

コンパイル時に値が決まらない(pow関数の呼び出し)のでエラー

double M=q/ma;

上記が原因で値が決まっていない。

投稿2020/06/21 03:38

cateye

総合スコア6851

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

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

cateye

2020/06/21 03:41

double vx=pow(M,0.5); もそうですね、
kisara11235

2020/06/21 04:56

ありがとうございます。 教本を確認しながらもう一度作り直します。
guest

0

こんにちは。
パッと見た感じですが、ループ文の中に変数宣言とreturnはよろしくないかと思いました。
それが根本的な解決になるかはわかりませんが、とりあえず、for文の中にdouble k1;やreturn 0;があるのはおかしいのでmain(){の下に書くといいと思います。
return 0;はmain文の最後で良いと思います。

投稿2020/06/21 03:17

syalpon

総合スコア24

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

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

syalpon

2020/06/21 03:24

あとサブ関数g()の返値がおかしいですね。 gは関数なのにあたかも変数のようにg = ...となっています。違うdouble型の変数名で宣言して返すといいと思います
syalpon

2020/06/21 03:38

さらに ''' double x=-2000, b=2000,y[N]={10,50,100,150,200,300}; double n,h,t,vx,vy,q=5.30*2,ma=6.664*pow(10,-27),M; double M=q/ma; double vx=pow(M,0.5); double n=40000; double h=(b-x)/n; ''' の部分では変数宣言が二度されています。ので double n,h,t,vx,vy,q=5.30*2,ma=6.664*pow(10,-27),M; とdouble型でn,h,t...Mを宣言したのであれば下の double M=q/ma; は M = q/ma; で良いかと思います。 さらに細かい点を付け加えるならfor文でのカウンタ変数 i はint型にしておくといいと思います。 浮動小数点型はあくまで近似値として小数を扱うため、数値に誤差がありループによって積み重なると意図しない値を取る可能性があるからです。
thkana

2020/06/21 04:58 編集

回答としては、まずは、質問にある「エラーの原因と対処法」に集中するべきではありませんか。 それ以外にも問題があることの指摘も必要になってくるでしょうが、それに終始するのもいかがなものかと思います。
kisara11235

2020/06/21 04:56

ありがとうございます。 教本を確認しながらもう一度作り直します。
syalpon

2020/06/21 06:42

>>thkanaさん 仰る通りですね。 少しずれた回答になってしまって申し訳ございません。 言い訳にはなりますが、自分はがコンパイルエラーが指す原因のことよりも間違った文法の方でエラーが起きているものだと思い、エラー文の対処よりも先に文法の指摘を書いてしまいました。 例え話になるのですが自分の環境ですと文末の;を忘れた場合などはその直前の行にある処理でエラーが出たりするので、質問でのエラー文が直接その原因だとは思っていなかったということです。 改めてですが指摘くださりありがとうございます。 以後気をつけて回答させていただきます。
guest

0

24、25,26で「 too few arguments to function call, expected 4, have 2」と出ます。

はメッセージの通りで、関数の定義では引数が4つになっていますが、呼び出している時に引数を2つしか渡していません。

投稿2020/06/21 03:16

bassbone

総合スコア767

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問