Умножение комплекса с константой в C++

Следующему коду не удается скомпилировать

#include <iostream>
#include <cmath>
#include <complex>

using namespace std;

int main(void)
{
    const double b=3;
    complex <double> i(0, 1), comp;

    comp = b*i;

    comp = 3*i;

    return 0;
}

с ошибкой: никакое соответствие для ‘оператора*’ в ‘3 * я’ Что не так здесь, почему я не могу умножиться с непосредственными константами? работы b*i.

5
задан PeeHaa 5 September 2012 в 14:01
поделиться

2 ответа

В первой строке:

comp = b*i;

Компилятор вызывает:

template<class T> complex<T> operator*(const T& val, const complex<T>& rhs);

Который представлен как:

template<> complex<double> operator*(const double& val, const complex<double>& rhs);

Во втором случае нет подходящего template int , поэтому создание экземпляра не удается:

comp = 3.0 * i; // no operator*(int, complex<double>)
6
ответ дан 13 December 2019 в 22:04
поделиться

См. http://www.cplusplus.com/reference/std/complex/complex/operators/ для обзора сложные операторы.

Вы заметите, что оператор * является шаблоном и будет использовать параметр шаблона сложного класса для генерации этого кода. Числовой литерал, который вы используете для вызова оператора *, имеет тип int. Используйте comp = 3. * i;

4
ответ дан 13 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: