• ベストアンサー

構造体のアクセスについて

タイトル通りではないかもしれないですが、 以下のソースで、「x()」を使わずに、「xx()」を使用するにはどうすればよいでしょうか? 説明不足ですが、どういえば言いのか判らないので、 うまく表現できないです。 要するに、「x()」の一階層上の「xx()」でアクセスがしたいのです???... #include<iostream> using namespace std; class data { public: struct list { int m; int n; list operator +(list &dat); list operator -(list &dat); int x(){return m;} } li; int xx() { data::list cd; return cd.m; } }; data::list data::list::operator +(data::list &dat) { list tmp; tmp.m=tmp.n=dat.m+dat.n; return tmp; } data::list data::list::operator -(data::list &dat) { list tmp; tmp.m=tmp.n=dat.m-dat.n; return tmp; } int main() { data dat1,dat2; dat1.li.m=10; dat1.li.n=79; dat2.li=dat1.li+dat1.li; cout << dat2.xx(); cout << dat2.li.x(); while(1){}return 0; } 大変申し訳ありませんが、よろしくお願いします。 また、何か上手な記述がありましたら、ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>ところで、「li.m」の「m」が「.」を押しても出ないのですが、 >なぜでしょうか? よくわかりませんが、たまに候補が出ないことがあります。 そういうものと思っていたほうがいいでしょう。

noname#6117
質問者

お礼

わかりました。ありがとうございました。 お手数掛けました。

その他の回答 (3)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.4

>ところで、「li.m」の「m」が「.」を押しても出ないのですが、 >なぜでしょうか? 経験上、プロジェクトを閉じて、「.ncb」のファイルを削除すると回復する場合があります。 VC++6.0の場合。

noname#6117
質問者

お礼

ありがとうございました。 わかりました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>に変更しましたら無事通りました。 あのう、”通る”というと、コンパイルが通るとか、 処理が通るといったことを考えるんですけど。 相手に理解してもらいたいのでしたら「正常に動作した」という 意味では使わないほうがいいですよ。 >li.m→ここで、「.」を押してもmが出てこなかったので、 >無視していたようでした。 >ありがとうございました。 >ところで、「li.m」の「m」が「.」を押しても出ないのですが、 >なぜでしょうか? ????????? 出るってなにが? いきなり突拍子もないことを言わないでください。 もしかして、VisualStudioをお使いで、IntelliSenseのことをいってますか? http://www.itmedia.co.jp/dict/os/kind/windows/programming/tools/02918.html >m n を同一の変数内で、足し算をしたかったのです。 >while(1){}return 0; >は、終了しないようにするためです。 >判りにくいですが、画面の出力の確認のためでした。 出力内容の確認のためでもそんなことはしません。 大体そんなことをしたらCPU使いっぱなしになって大変なことになります。 getchar()でキー入力待ちにすればいいだけです。

noname#6117
質問者

お礼

getchar() はい、わかりました。 以後これを使います、 こういう関数があったのですか、 私は、while(1){} か、 cin >> string; しか使ったことないので、悩んでいました。 ありがとうございます。 はい、インテリセンスのことです。 すみません。 通ったという表現は、私のレベルでは、コンパイラが教師みたいなものでして、以後質問時には気をつけます。 それで、結局、何故なのでしょうか?

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

すみません。 私にはクラスの構造と、何をこれでしようとしているかが理解できません・・・ メンバのmとnは何を示すものでしょう? x()も、、xx()もmを返しているだけで何をしているのでしょう?何のためのメンバ関数なのでしょう? >int xx() >{ >data::list cd; >return cd.m; >} cd.mですが、data::listにデフォルトコンストラクタがないから不定な値を返しています。 最後の while(1){}return 0; これなんて、永久にプログラムが終了しないんですけども・・・

noname#6117
質問者

補足

回答ありがとうございました。 int xx() { data::list cd; return cd.m; } の部分を、 int xx() { return li.m; } に変更しましたら無事通りました。 li.m→ここで、「.」を押してもmが出てこなかったので、 無視していたようでした。 ありがとうございました。 ところで、「li.m」の「m」が「.」を押しても出ないのですが、 なぜでしょうか? --------------------------------------------- m n を同一の変数内で、足し算をしたかったのです。 while(1){}return 0; は、終了しないようにするためです。 判りにくいですが、画面の出力の確認のためでした。 ありがとうございました。

関連するQ&A

専門家に質問してみよう