Перегруженные типы не работают - PullRequest
0 голосов
/ 09 сентября 2011

Я построил небольшой класс, представляющий десятичное число, под названием Complex.Я хочу иметь возможность привести его к удвоению, поэтому вот мой код

Complex.h

public:
    operator double();

Complext.cpp

Complex::operator double()
{
return _num;
}

_num это полетип double, конечно

Кажется, все в порядке.Проблема в другом классе, где я на самом деле пытаюсь преобразовать сложный объект в двойной.Это моя функция:

const RegMatrix& RegMatrix::operator *= (double num)
{
    Complex factor(num);
    for(int i=0; i<_numRow; i++)
    {
        for(int j=0; j<_numCol; j++)
        {
            Complex temp = _matrix[i][j];
            _matrix[i][j] = (double) (temp * factor); //<---ERROR HERE
        }
    }
    return *this;
}

Это приводит к invalid cast from type ‘const Complex’ to type ‘double’

Я понятия не имею, почему это происходит.Есть идеи?Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Вам необходимо настроить operator double a const:

operator double() const;

и

Complex::operator double() const {
    return _num;
}
1 голос
/ 09 сентября 2011

Как ясно указывает на ошибку, для комплекса const преобразование не удваивается. Просто определите свой оператор преобразования следующим образом:

operator double() const;

Complex::operator double() const
{
    return _num;
}

Обратите внимание на модификатор const в конце. Вы действительно должны искать информацию о константности в C ++.

...