Как устранить ошибку компиляции "не может преобразовать const в ссылку" в VC ++ 9 - PullRequest
2 голосов
/ 20 августа 2010

Я работаю в проекте миграции с VC6 на VC9.В VC9 (Visual Studio 2008) я получил ошибку компиляции при передаче константного члена в метод, который принимает ссылку.Он компилируется без ошибок в 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 &'

Пожалуйста, помогите мне устранить эту ошибку.

1 Ответ

1 голос
/ 20 августа 2010

Это связано с тем, что метод GetNext() возвращает временный объект класса A, а функция AddTail принимает параметр A&.Поскольку временный объект не может быть привязан к неконстантной ссылке, вы получаете ошибку.Самый простой способ решить это - разбить его на два утверждения.Например:

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