- ベストアンサー
構造体のアクセスについて
タイトル通りではないかもしれないですが、 以下のソースで、「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; } 大変申し訳ありませんが、よろしくお願いします。 また、何か上手な記述がありましたら、ご教授ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>ところで、「li.m」の「m」が「.」を押しても出ないのですが、 >なぜでしょうか? よくわかりませんが、たまに候補が出ないことがあります。 そういうものと思っていたほうがいいでしょう。
その他の回答 (3)
- neKo_deux
- ベストアンサー率44% (5541/12319)
>ところで、「li.m」の「m」が「.」を押しても出ないのですが、 >なぜでしょうか? 経験上、プロジェクトを閉じて、「.ncb」のファイルを削除すると回復する場合があります。 VC++6.0の場合。
お礼
ありがとうございました。 わかりました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>に変更しましたら無事通りました。 あのう、”通る”というと、コンパイルが通るとか、 処理が通るといったことを考えるんですけど。 相手に理解してもらいたいのでしたら「正常に動作した」という 意味では使わないほうがいいですよ。 >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()でキー入力待ちにすればいいだけです。
お礼
getchar() はい、わかりました。 以後これを使います、 こういう関数があったのですか、 私は、while(1){} か、 cin >> string; しか使ったことないので、悩んでいました。 ありがとうございます。 はい、インテリセンスのことです。 すみません。 通ったという表現は、私のレベルでは、コンパイラが教師みたいなものでして、以後質問時には気をつけます。 それで、結局、何故なのでしょうか?
- taka_tetsu
- ベストアンサー率65% (1020/1553)
すみません。 私にはクラスの構造と、何をこれでしようとしているかが理解できません・・・ メンバのmとnは何を示すものでしょう? x()も、、xx()もmを返しているだけで何をしているのでしょう?何のためのメンバ関数なのでしょう? >int xx() >{ >data::list cd; >return cd.m; >} cd.mですが、data::listにデフォルトコンストラクタがないから不定な値を返しています。 最後の while(1){}return 0; これなんて、永久にプログラムが終了しないんですけども・・・
補足
回答ありがとうございました。 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; は、終了しないようにするためです。 判りにくいですが、画面の出力の確認のためでした。 ありがとうございました。
お礼
わかりました。ありがとうございました。 お手数掛けました。