掲示板利用宣言

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

 私は

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

掲示板2

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

No.28203

名前空間に関して
投稿者---h3X(2006/09/18 15:15:02)


環境はLinux, gccです.

名前空間に関しての質問です.

struct A {

    struct B {

    } b;
};

struct B {

};

int main(int argc, char **argv)
{

    return 0;
}


上記のプログラムをコンパイルすると,

try.c:8: error: redefinition of `struct B'

と「struct B」の2重定義でコンパイルエラーとなります.

最初の構造体Bの定義は,構造体Aの中で行なわれているので,2度めの構造体Bの定義位置とでは,
名前空間が違ってもよさそうですが,そうではなさそうです.

これはどう理解すればよろしいのでしょうか?

ご教授の程よろしくお願い致します.


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:名前空間に関して 28206 たかぎ 2006/09/18 17:36:04


No.28206

Re:名前空間に関して
投稿者---たかぎ(2006/09/18 17:36:04)
http://takagi.in/


>最初の構造体Bの定義は,構造体Aの中で行なわれているので,2度めの構造体Bの定義位置とでは,
>名前空間が違ってもよさそうですが,そうではなさそうです.
>
>これはどう理解すればよろしいのでしょうか?

タグ名の名前空間は、翻訳単位全体を通じて共通です。
また、有効範囲に関しても、C++のようなクラス有効範囲がないので、入れ子になっていようがいまいが同じ構造体とみなされてしまいます。



この投稿にコメントする

削除パスワード

No.28207

Re:名前空間に関して (解決)
投稿者---h3X(2006/09/18 18:03:39)


ご返信ありがとうございます.

>タグ名の名前空間は、翻訳単位全体を通じて共通です。

なるほど,理解できました.ありがとうございました.


この投稿にコメントする

削除パスワード

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