【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21383

関数の宣言?
投稿者---奈美(2005/06/13 20:15:47)


関数の部分なんですが次のようなプログラムを作ったら
下に書いてあるようなエラーが出てしまいました。
何かを関数の前につけるみたいなんですが、
何をつけていいのかわかりません。
教えてください。

Mac OS X を使っていてコンパイラは多分 gcc? を使っています。

#include <stdio.h>
#include <stdlib.h>
addDate();
delDate(int dl,char dk[50],struct personal_t *dsNow);
searchDate(char sk,struct personal_t *spNow);

省略

addDate(){

省略

}
delDate(int i,char val[9],struct personal_t *dsNow){

省略

}
searchDate(char i,struct personal_t *spNow){

省略

}
int main(){

省略

}
: warning: data definition has no type or storage class
: warning: data definition has no type or storage class
: warning: data definition has no type or storage class
: At top level:
: error: conflicting types for `delPlayerDate'
: error: previous declaration of `delPlayerDate'
: error: conflicting types for `searchTeamDate'
: error: previous declaration of `searchTeamDate'


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:関数の宣言? 21384 RAPT 2005/06/13 20:23:08


No.21384

Re:関数の宣言?
投稿者---RAPT(2005/06/13 20:23:08)


> addDate();
> delDate(int dl,char dk[50],struct personal_t *dsNow);
> searchDate(char sk,struct personal_t *spNow);

関数の型が記述されていません。関数の型は省略できません。
値を返さない場合は void 型を明示する必要があります。



この投稿にコメントする

削除パスワード

No.21385

Re:関数の宣言?
投稿者---奈美(2005/06/13 20:44:08)


どれも値を返したいのですがその場合はどのような
関数の型を付ければいいのですか?



この投稿にコメントする

削除パスワード

No.21386

Re:関数の宣言?
投稿者---REE(2005/06/13 21:00:40)


>どれも値を返したいのですがその場合はどのような
>関数の型を付ければいいのですか?

返す値の型をつけてください。


この投稿にコメントする

削除パスワード

No.21387

Re:関数の宣言?
投稿者---奈美(2005/06/13 21:11:00)


addDate では構造体を返したいです。
delDate では int i を返したいです。
searchDate でも構造体を返したいです。


この投稿にコメントする

削除パスワード

No.21388

Re:関数の宣言?
投稿者---RAPT(2005/06/13 21:20:34)


> addDate では構造体を返したいです。
構造体の型 addDate(...)

> delDate では int i を返したいです。
int addDate(...)

> searchDate でも構造体を返したいです。
構造体の型 addDate(...)


struct my_type{
    int a, b;
};


my_type my_func(void);
my_type my_func(void)
{
    my_type mine;
    mine.a = 10;
    mine.b = 20;
    return mine;
}



この投稿にコメントする

削除パスワード

No.21389

Re:関数の宣言?
投稿者---奈美(2005/06/13 21:42:39)


やってみたんですが次のようなエラーが出てしまいました。
addDate は良かったみたいなんですけど・・・

: error: conflicting types for `delPlayerDate'
: error: previous declaration of `delPlayerDate'
: error: conflicting types for `searchTeamDate'
: error: previous declaration of `searchTeamDate'



この投稿にコメントする

削除パスワード

No.21391

Re:関数の宣言?
投稿者---左団扇(2005/06/13 22:02:26)


プロトタイプ宣言も戻り値の型書きましたか?


この投稿にコメントする

削除パスワード

No.21393

Re:関数の宣言?
投稿者---奈美(2005/06/13 22:20:20)


宣言の方も書いたんですけど・・・
エラーがでてしまいます。


この投稿にコメントする

削除パスワード

No.21400

Re:関数の宣言?
投稿者---奈美(2005/06/13 22:49:25)


宣言の方も書いたんですけど・・・
エラーがでてしまいます。


この投稿にコメントする

削除パスワード

No.21394

Re:関数の宣言?
投稿者---RiSK(2005/06/13 22:24:34)


>やってみたんですが次のようなエラーが出てしまいました。

No.21383のように(何かを)「やってみた」ソースを張ってください。

エラーメッセージだけでは分かりません。


この投稿にコメントする

削除パスワード

No.21396

Re:関数の宣言?
投稿者---Blue(2005/06/13 22:28:09)


構造体の場合は
構造体名の前に struct をつけないといけません。

struct point
{
    int x;
    int y;
};

struct point func1( void );
int   func2( struct point p );




この投稿にコメントする

削除パスワード

No.21398

Re:関数の宣言?
投稿者---RAPT(2005/06/13 22:33:49)


Cでは、struct を省略できないので、下記のように typedef する方法もあります。
typedef struct my_type_t{
    int a, b;
} my_type;



この投稿にコメントする

削除パスワード

No.21401

Re:関数の宣言?
投稿者---奈美(2005/06/13 22:58:49)


ごめんなさい。ソースは下のようなかんじです。
一応 typede も使っているんですが、 struct を
もう一度つけた方がいいですか? 

#include <stdio.h>
#include <stdlib.h>
typedef struct new_tag{

省略

}my_t
my_t addPlayerDate();
int delPlayerDate(int i,char val[9],struct my_t *dsNow);
my_t searchTeamDate(char i,struct my_t *spNow);
addDate();
delDate(int dl,char dk[50],struct personal_t *dsNow);
searchDate(char sk,struct personal_t *spNow);

省略

my_t addDate(){

省略

}
int delDate(int i,char val[9],struct my_t *dsNow){

省略

}
my_t searchDate(char i,struct my_t *spNow){

省略

}
int main(){

省略

}


この投稿にコメントする

削除パスワード

No.21402

Re:関数の宣言?
投稿者---Blue(2005/06/13 23:03:46)


第11章 関数で、いちから勉強すべきでしょう。



この投稿にコメントする

削除パスワード

No.21404

Re:関数の宣言?
投稿者---ぽこ(2005/06/13 23:07:11)


>typedef struct new_tag{
>
> 省略
>
> }my_t

セミコロンは?


>addDate();
>my_t addDate(){
>
>省略
>
>}

↑プロトタイプ宣言と定義が一致していません。

>searchDate(char sk,struct personal_t *spNow);
>my_t searchDate(char i,struct my_t *spNow){
>
>省略
>
>}

・↑プロトタイプ宣言と定義が一致していません。
・struct my_t → my_t


この投稿にコメントする

削除パスワード

No.21408

Re:関数の宣言?
投稿者---奈美(2005/06/13 23:19:53)


ごめんなさい。セミコロンはここに書くときに
つけ忘れちゃいました。
my_t のところを new_tag にしてみたんですが
次のようなエラーになってしまいました。
どこが悪いんでしょうか?

error: parse error before "addDate"
warning: data definition has no type or storage class
error: parse error before "searchDate"
warning: data definition has no type or storage class
error: parse error before "addDate"
:At top level:
error: conflicting types for `delDate'
error: previous declaration of `delDate'
error: parse error before "searchDate"
error: conflicting types for `searchDate'
error: previous declaration of `searchDate'



この投稿にコメントする

削除パスワード

No.21416

Re:関数の宣言?
投稿者---ぽこ(2005/06/13 23:32:31)


>my_t のところを new_tag にしてみたんですが

my_tはstruct new_tagであって、単なるnew_tagで置き換えられないのは、
理解してますか?

ソースコードをいじったら載せ直したほうが良いと思います。
#現状がよく分かりません。



この投稿にコメントする

削除パスワード

No.21407

Re:関数の宣言?
投稿者---RiSK(2005/06/13 23:14:49)


>ソースは下のようなかんじです。

「かんじ」ではなく,「コピペ」推奨。

>一応 typede も使っているんですが、 struct を
>もう一度つけた方がいいですか? 

typedef が分からないなら 16−1.typedefを見て勉強。

struct が分からないなら第15章 構造体を見て勉強。

コンパイルエラーの詳細は…書いているうちに
ぽこさんのレスが付いたので,割愛。


この投稿にコメントする

削除パスワード

No.21410

Re:関数の宣言?
投稿者---奈美(2005/06/13 23:25:44)


何度もごめんなさい。struct をつけたら
ここまで減りました。でもタイプが不一致ってことは
ちがうのでしょうか?

: At top level:
error: conflicting types for `delDate'
error: previous declaration of `delDate'
error: conflicting types for `searchDate'
error: previous declaration of `searchDate'



この投稿にコメントする

削除パスワード

No.21413

Re:関数の宣言?
投稿者---RiSK(2005/06/13 23:29:16)


デジャビュですな。
No.21394を読んで下さい。



この投稿にコメントする

削除パスワード

No.21414

Re:関数の宣言?
投稿者---左団扇(2005/06/13 23:30:18)


typedefでstructつけてるワケじゃないよね??

現状がよく分からないのでソースコードを。


この投稿にコメントする

削除パスワード

No.21417

Re:関数の宣言?
投稿者---奈美(2005/06/13 23:39:59)


ソースはこう書いて先ほどのエラーが出てしまいました。

#include <stdio.h>
#include <stdlib.h>
typedef struct new_tag{

省略

}my_t
struct new_tag addDate();
int delDate(int dl,char dk[50],struct personal_t *dsNow);
struct new_tag searchDate(char sk,struct personal_t *spNow);

省略

struct new_tag addDate(){

省略

}
int delDate(int i,char val[9],struct my_t *dsNow){

省略

}
struct new_tag searchDate(char i,struct my_t *spNow){

省略

}
int main(){

省略

}



この投稿にコメントする

削除パスワード

No.21419

Re:関数の宣言?
投稿者---ぽこ(2005/06/13 23:46:54)


delDateのプロトタイプ宣言
>int delDate(int dl,char dk[50],struct personal_t *dsNow);

delDateの定義
>int delDate(int i,char val[9],struct my_t *dsNow)

searchDateのプロトタイプ宣言
>struct new_tag searchDate(char sk,struct personal_t *spNow);

searchDateの定義
>struct new_tag searchDate(char i,struct my_t *spNow){

delDate()とsearchDate()のそれぞれ、プロトタイプ宣言と定義の
引数の型が一致していません。
delDate()は第2引数でchar[50]型とchar[9]型、
第3引数でstruct personal_t *型とstruct my_t *型(あれ?)になっています。
searchDate()も第2引数が一致していません。


この投稿にコメントする

削除パスワード

No.21421

Re:関数の宣言?
投稿者---奈美(2005/06/13 23:51:13)


ごめんなさい。間違えてのせてしまいました。
ソースはこれです。

#include <stdio.h>
#include <stdlib.h>
typedef struct new_tag{

省略

}my_t
struct new_tag addDate();
int delDate(int i,char val[9],struct my_t *dsNow);
struct new_tag searchDate(char i,struct my_t *spNow);

省略

struct new_tag addDate(){

省略

}
int delDate(int i,char val[9],struct my_t *dsNow){

省略

}
struct new_tag searchDate(char i,struct my_t *spNow){

省略

}
int main(){

省略

}




この投稿にコメントする

削除パスワード

No.21422

Re:関数の宣言?
投稿者---左団扇(2005/06/13 23:56:34)


スレもかなり長くなってきてまどろっこしいので。

プロトタイプ宣言を
my_t addDate();
int delDate(int,char *,my_t *);
my_t searchDate(char,my_t *);
にすればよいんでは。あとmy_tはtypedefしたんだから、my_tを使うときはstructはいらない。
それからchar型の変数にiという名前をつけるのはいかがなものかと思うけど。




この投稿にコメントする

削除パスワード

No.21423

Re:関数の宣言?
投稿者---shu(2005/06/13 23:59:59)


質問する方も、返信する方も、短時間に大量に書きこみ過ぎ。

あまりにも返信に返信を繰り返してしまうと、
肝腎の質問者が自分で考える時間をつぶしてしまい、
掲示板チェックが目的になり、問題解決には至らないのではないでしょうか?

スパゲッティスレッドになっている感じがします。


この投稿にコメントする

削除パスワード

No.21424

Re:関数の宣言?
投稿者---奈美(2005/06/14 00:02:23)


ありがとうございました。
もう一度自分で考えてみます。



この投稿にコメントする

削除パスワード

No.21433

Re:関数の宣言?
投稿者---あかま(2005/06/14 00:35:13)


>typedef struct new_tag{
>省略
>}my_t
未だにセミコロンがないような。
typedef struct new_tag{
省略
}my_t;




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧