2

私はVC6からVC9への移行プロジェクトに取り組んでいます。VC9(Visual Studio 2008)で、参照を受け入れるメソッドにconstメンバーを渡すときにコンパイルエラーが発生しました。VC6ではエラーなしでコンパイルされています。

サンプルプログラム:

class A
{
};

typedef CList<A, A&> CAlist;

class B
{
    CAlist m_Alist;

public:
    const B& operator=( const B& Src);
};

const B& B::operator=( const B& Src)
{
    POSITION pos = Src.m_Alist.GetHeadPosition();

    while( pos != NULL)
    {
        **m_Alist.AddTail( Src.m_Alist.GetNext(pos) );**
    }

    return *this;
}

エラー:上記のプログラムをコンパイルしているときに、次のようなエラーが発生しました

エラーC2664:'POSITION CList :: AddTail(ARG_TYPE)':パラメータ1を'const A'から'A&'に変換できません

このエラーを解決するのを手伝ってください。

4

1 に答える 1

1

これは、GetNext()メソッドがクラスのtemopraryオブジェクトを返しA、関数AddTailがパラメーターを受け取るためA&です。一時オブジェクトは非定数参照にバインドできないため、エラーが発生します。それを解決する最も簡単な方法は、2つのステートメントに分割することです。例えば:

    while( pos != NULL)
    {
        A a =  Src.m_Alist.GetNext(pos);
        m_Alist.AddTail(a);
    }
于 2010-08-20T10:31:20.567 に答える