初歩的な質問で恐縮なのですが、
CList<CString, CString&> m_list;
m_list.AddTail(CString(_T(TEST)));
とすると
warning C4239: 非標準の拡張機能が使用されています : 'argument' : 'class CString'
から 'class CString &' への変換です。
'const' に対してではない参照は 非 lvalue へバインドできません。
というウォーニングが出ます。
このウォーニングがでないようにコーディングするにはどうしたらいいでしょうか?
開発環境はWinMe, VC++6.0SP5(warningレベル4) MFCです。
CList<CString, CString&> m_list;
CString cstr= _T(TEST);
m_list.AddTail(cstr);
ではダメですか?
tibさんのコードでウォーニングはでなくなりました。
AddTailに一時オブジェクトを渡してるのがまずいんでしょうか?
> AddTailに一時オブジェクトを渡してるのがまずいんでしょうか?
ってゆーか、
> CList<CString, CString&> m_list;
^^^^^^^^
って書くことで、まずくしたのはあなたです。
επιστημηさんのおっしゃてることが今ひとつ理解できません。
MSDNに
------------------------------------------
template< class TYPE, class ARG_TYPE >
class CList : public CObject
引数
TYPE
リストに格納されるオブジェクトの型。
ARG_TYPE
リストに格納されているオブジェクトを参照するときに使う型。通常は TYPE 型の参照です。
-------------------------------------------
と書いてあったので、CList<CString, CString&>としたのですが・・・
> リストに格納されているオブジェクトを参照するときに使う型。通常は TYPE 型の参照で
す。
> -------------------------------------------
> と書いてあったので、CList<CString, CString&>としたのですが・・・
...としたからそのwarningが発生したってことです。
ARG_TYPEは、CArrayのメンバ関数の引数にTYPEオブジェクトを渡す時の型ですから、
CArray<CString,const CString&>
の方が良いのではないでしょうか。
const参照なら、一時オブジェクトの参照を指定できます。
επιστημηさんのおっしゃりたいことは
一時オブジェクトをAddTailに渡すなら
CList<CString, CString&>
ではなく
CList<CString, const CString&>
にしなさい。
ということでしょうか?
YES. ってゆーか、やってみましょう。
はい。すでにやってみました。
結果はウォーニングはでませんでした。
C++はブランクが3年ほどあるので、
ちょっとおマヌケな質問でした。
親切に回答してくださった方、ありがとうございました。
ということで解決済みにしておきます。