C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 同じ名前空間内の構造体について


(過去ログ 55 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■30735 / inTopicNo.1)  同じ名前空間内の構造体について
  
□投稿者/ YU (1回)-(2009/01/05(Mon) 14:56:31)

分類:[C/C++] 

宜しくお願いします。
当方の環境はWinXPでVisual C++ 2003です。

例えば下記のコードの場合。
-------------------------------------
namespace AAA
{
map<string, BBB> CCC;

struct BBB
{
string xxxx;
string yyyy;
string zzzz;
};
}
-------------------------------------
これだと"BBBはメンバではない"とエラーになってしまいます。

かといって
map<string, BBB> CCC;

map<string, AAA::BBB> CCC;

としてもやはり同じエラーとなります。
勉強不足の為かもしれませんが、色々調べてもなかなか理解できず困っています。
何故エラーになるのかわかる方がいらっしゃいましたら、ご教授をよろしくお願いします。
引用返信 編集キー/
■30736 / inTopicNo.2)  Re[1]: 同じ名前空間内の構造体について
□投稿者/ 通りすがり。 (1回)-(2009/01/05(Mon) 15:15:14)
No30735 (YU さん) に返信

はじめまして。単なる通りすがりです。

-------------------------------
namespace AAA
{
    struct BBB; // 追加

    map<string, BBB> CCC;
     :
     :
-------------------------------
で、どうでしょうか?
お察しの通り、BBBの定義がmapの定義より後に
ありますから・・・。

引用返信 編集キー/
■30737 / inTopicNo.3)  Re[1]: 同じ名前空間内の構造体について
□投稿者/ 出水 (106回)-(2009/01/05(Mon) 15:21:00)
namespace AAA
{
struct BBB
{
string xxxx;
string yyyy;
string zzzz;
};

map<string, BBB> CCC;

}

こう書けば解決です。

C#だと、どこかに書いていればコンパイルは通ってくれますが、
C/C++は上から読んでいくので、前に書かないと意味がありません。

今回の場合、map<string, BBB>を読んだ時点では、
BBBが初めて出てくる単語のため、どう解釈していいのかわからないわけです。
そこで、BBBが出てくる前に実体を宣言してやる必要があります。
引用返信 編集キー/
■30739 / inTopicNo.4)  Re[1]: 同じ名前空間内の構造体について
□投稿者/ 774RR (272回)-(2009/01/05(Mon) 15:21:56)
答え書いちゃうのは簡単なんだけど、答え一発のほうがいい?
それとも調べるヒントのほうがいい?

map<T,U> の T, U は定義済みの型である必要がある(不完全型ではダメ)ってのが
言語規格書的な答えとなるかな。
そうなるとソースコードをどう書けばよいかは必然的に導かれて・・・

まあアレだ、
#include <string> しなきゃ std::string が使えないとか
#include <vector> しなきゃ std::vector が使えないとか
その辺と同じだ。
引用返信 編集キー/
■30746 / inTopicNo.5)  Re[2]: 同じ名前空間内の構造体について
□投稿者/ YU (2回)-(2009/01/05(Mon) 16:13:00)
皆様

大変有難うございました。

C++は初心者なのですが、よく考えれば気付いたかもしれませんね。
新しく勉強する言語ってどうしても先入観というか、「この言語はこの書き方じゃ駄目なのかぁ」に囚われ過ぎてしまうのが自分の欠点のようです。

わかり易いご返答・解決への道標、大変ありがたかったです。

またよろしくお願いします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -