掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

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

掲示板2

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

No.25460

typedef宣言の入れ子について
投稿者---いの(2006/01/18 16:06:26)


申し訳ありませんが、分かる人教えてください。
typedef宣言で入れ子を使いたいです。
以下のようにするとエラーが出てダメです。
うまいやり方はないでしょうか??

typedef int (*testFunc_t)(CONST char *a, 
                          CONST st1_t *b, 
                          CONST int c[20]);

typedef struct st1{
    int d;
    int e;
    int f
    int g;
    int h;
    testFunc_t i;
} st1_t;




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:typedef宣言の入れ子について 25462 kz3 2006/01/18 16:40:54
<子記事> Re:typedef宣言の入れ子について 25464 nop 2006/01/18 16:50:05
<子記事> Re:typedef宣言の入れ子について 25465 NykR 2006/01/18 16:54:36
<子記事> Re:typedef宣言の入れ子について 25467 いの 2006/01/18 17:26:41


No.25462

Re:typedef宣言の入れ子について
投稿者---kz3(2006/01/18 16:40:54)


CONST が気になりますが、以下のようにタグ名を指定することで出来ます。

#include <stdio.h> typedef struct tagA{ int a; struct tagB *pb; } A; typedef struct tagB{ int b; A *pa; } B; int main( void ) { A ta; B tb; ta.a = 10; ta.pb = &tb; tb.b = 20; tb.pa = &ta; printf("%d\n",ta.a); printf("%d\n",ta.pb->b); printf("%d\n",tb.b); printf("%d\n",tb.pa->a); return 0; }



この投稿にコメントする

削除パスワード

No.25463

Re:typedef宣言の入れ子について
投稿者---kz3(2006/01/18 16:47:04)


あ、すいません。関数ポインタの引数が論点でしたね。
引数についても同じことです。


この投稿にコメントする

削除パスワード

No.25464

Re:typedef宣言の入れ子について
投稿者---nop(2006/01/18 16:50:05)


>typedef宣言で入れ子を使いたいです。
>以下のようにするとエラーが出てダメです。

エラーが出るのでしたら、
出力されたエラーメッセージくらいは貼りましょう。
また、環境も書かれていません。

> int e;
> int f
> int g;

「int f」に「;」が抜けています。
コンパイルエラーの内容と、
エラーが発生した辺りをよく見ればすぐに気が付くはずです。



この投稿にコメントする

削除パスワード

No.25465

Re:typedef宣言の入れ子について
投稿者---NykR(2006/01/18 16:54:36)


# CONSTはconstダロとかセミコロンが抜けているとかいう話はとりあえず措いておいて。

Cでは、識別子の前方参照はできません。

こういうときは前もって構造体タグだけにtypedef名を付けておいて

typedef struct st1 st1_t;

あとで構造体の本体を宣言すればいいです。

struct st1{
    int d;
    int e;
    int f;
    int g;
    int h;
    testFunc_t i;
};



typedef記憶域クラス指定子によって宣言された識別子は無結合 ---簡単にいえば、1度しか宣言できない--- なので、本体の宣言時にはtypedefは付けません。


この投稿にコメントする

削除パスワード

No.25467

Re:typedef宣言の入れ子について
投稿者---いの(2006/01/18 17:26:41)


みなさん、どうも有難うございました。
(;がついてなかったのは、掲示板用にあわてて修正したからです。)

以下の様に修正してみました。

typedef int (*testFunc_t)(CONST char *a, 
                          CONST struct st1 *b, 
                          CONST int c[20]);

typedef struct st1{
    int d;
    int e;
    int f;
    int g;
    int h;
    testFunc_t i;
} st1_t;

エラーは消えましたが、以下のようなワーニングが出ます。

warning: `struct st1_t' declared inside parameter list
warning: its scope is only this definition or declaration,
warning: which is probably not what you want.

実際はこれだけのソースではないので、これだけでは情報不足だとは思いますが、
なにか心当たりがあれば教えてください。
関数ポインタやstructは他でも使用しているので、内容は変えたくないんです。

ほんとに教えてクンですみませんが、よろしくお願いします。



この投稿にコメントする

削除パスワード

No.25468

Re:typedef宣言の入れ子について
投稿者---iijima(2006/01/18 18:08:11)


>なにか心当たりがあれば教えてください。

人の話を聞かないのが原因と思われます。
NykRさんの回答をなぜ読まないのですか?


この投稿にコメントする

削除パスワード

No.25469

Re:typedef宣言の入れ子について
投稿者---いの(2006/01/18 18:22:57)


>>なにか心当たりがあれば教えてください。
>
>人の話を聞かないのが原因と思われます。
>NykRさんの回答をなぜ読まないのですか?
すいません。勘違いしていました。
その通りにやったら、上手くいきました。

みなさん、ほんとうにありがとうございました。


この投稿にコメントする

削除パスワード

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