先日、お世話になりました。
またも申し訳ございません、こうです。
MFC
VC++6.0
ダイアログベース
でプログラム組んでいるのですが・・・・
SQLを受け取って、該当するレコードをCDaoRecordsetで
戻す関数(クラス?)を作成しております。
CDaoRecordset REC_set::REC_open(CString sql)//sql = SELECT文のSQL
{
m_record.Open(dbOpenDynaset, sql , dbDenyWrite);
return m_record;
}
// m_recordは private で宣言してあります。
↑のようなプログラムを組んだのですが、
CDaoRecordsetを戻り値として返すにはどうすればよいのでしょうか?
コピーコンストラクタをCDaoRecordsetに宣言しなければならないのでしょうか?
頭がパーなのでこれといった解決方がいまだ思いつきません。
どうかご教授お願いいたします。
あ!すみません
m_record は CDaoRecordset型です。
参照返しちゃダメですか?
お返事ありがとうございます!!
・・・参照・・・・
え~っと
↓これ?
CDaoRecordset* REC_set::REC_open(CString sql)//sql = SELECT文のSQL
{
m_record.Open(dbOpenDynaset, sql , dbDenyWrite);
↓これもかな?
return *m_record;
}
こう・・・ですかね?
わかりました、とりあえずやってみます。
え~っと・・・お名前が読めませんが・・・
επιστημηさん!!
ありがとうございました。
俺はなにを考えて・・・・
10分ほど前の自分に反省。
void REC_set::REC_open(CString sql,CDaoRecordset *rec)//sql = SELECT文のSQL
{
rec.Open(dbOpenDynaset, sql , dbDenyWrite);
}
こうかな?
いま家なんで 開発環境がないんですけど
明日、さっそく試します。
ありがとうございました。
参照は&で、*だとポインタになっちゃいますよ。
ポインタを返しても扱い方が違うだけなんで問題ないと思いますけど^^;
CDaoRecordset& REC_set::REC_open(CString sql)//sql = SELECT文のSQL
{
m_record.Open(dbOpenDynaset, sql , dbDenyWrite);
return m_record; //参照 返却
}
CDaoRecordset* REC_set::REC_open(CString sql)//sql = SELECT文のSQL
{
m_record.Open(dbOpenDynaset, sql , dbDenyWrite);
return &m_record; //ポインタ 返却
}
>void REC_set::REC_open(CString sql,CDaoRecordset *rec)//sql = SELECT文のSQL
>{
> rec.Open(dbOpenDynaset, sql , dbDenyWrite);
>}
こっちはrecに代入したかったのでしょか?(*rec=m_record?)
そうだとすると、
コピーコンストラクタか代入演算子が無いから、これも結局出来ない気がします^^;
おぉう!!俺ってホントにバカだ!!
ありがとうございます!!ポインタと参照は違うのか!!
で、受け取りは
REC_set db; //クラスを使う
CDaoRecordset m_pRecordset; //レコードセット
m_pRecordset = db.REC_open(sql);//参照が返ってくる
でいいのかな?
・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・おう!?なんじゃこりゃ!!
受け取る側が違う!?
なにが違うんだ~~?
くそぅ!もうちょっと勉強します!!
参照を受け取るんだから変数も参照型で宣言しましょ。
答えではないけれどヒントとして、例えばint型の参照を宣言するときはこんな感じ。
int n;
int& nRef=n; //nへの参照
# 参照とか宣言とか、用語の使い方を間違っていたらスミマセン。
参照がかえってきたけど、
値に対する operator= で、値の代入(要するにコピー)になっちゃいます。
まぁ、風さんの言うとおりですが。
だぁ~!!
なんとかなりました!!
(今までずっとやってました)
επιστημηさん
風さん
PAIさん
お世話になりました!!ありがとうございました!!