トップページ > 過去ログ > 記事閲覧
コンテナクラスのポインタを引数、戻り値にできるか?
名前:星樟八郎 日時: 2007/10/19 22:46

例えば、複数の、個数はいつも決まっていないデータを別の関数に送ろうとして、 vector<int>num; function(&num); } void function(vector<int>*npt) { int a,i; a=npt->at(i); } とするとうまくいくようですが、 逆に、複数のデータを関数から返そうと、 vector<int>*npt; int a,i; npt=function(); a=npt->at(i); } vector<int>*function() { vector<int>num; return &num } としてもうまくいかないみたいです。 ならば、関数へポインタを送ってコンテナクラスにデータを入れてもらうやり方で、 vector<int>num; int a,i; function(&num); a=num.at(i); void function(vector<int>*npt) { } としても、うまくできないようです。 間違いありませんか?それとも他にうまい方法は?

Page: 1 |

Re: コンテナクラスのポインタを引数、戻り値にできるか? ( No.1 )
名前:IW 日時:2007/10/20 01:19

>逆に、複数のデータを関数から返そうと  function()関数のローカル変数へのポインタを呼び出し元の変数 nptが受け取っていますが、 そのポインタは関数を抜けた瞬間に無効になるのでうまくはいきません。 >ならば、関数へポインタを送ってコンテナクラスにデータ  これならうまくいくはずです(別のミスをしていなければ)。 # C++ならポインタにしないで、参照にしてみてはどうでしょうか?
Re: コンテナクラスのポインタを引数、戻り値にできるか? ( No.2 )
名前:星樟八郎 日時:2007/10/22 17:27

うっかりしてました。 2番目のやり方で、vector<int>numをローカル変数にしてました。 訂正して、 static vector<int>num; あるいは、 vector<int>Num; vector<int>*function() { return &Num } とします。 実は、あれから、2番目と3番目のやり方でもう1度やってみました。 そしたら、うまくいきました。 前やったときは、単純なプログラムミス等が原因だったようです。 void function(vector<int>*npt)やvector<int>*function()ができるかどうか、 確信がないとうまくできなかったもので(ヘタな言い訳)。 それから、おっしゃる通り、こちらのプログラムで、ポインタを参照にしました。 大部分を変更しましたが、できなさそうでポインタのままのところもありますが。 何しろ、こちらのC++の参考文献が、 「14歳からはじめるC++わくわくゲームプログラミング教室」のみなもので。 参照についても少し載ってましたが。Strategyはうまくいきました。一応。本当。 もっとC++の専門書を読んだりサイトで調べたりするべきで?

Page: 1 |