2010-04-15 2 views
4

Следующий код не компилироватьне Умножив комплекс с константой в 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

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

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); 

Во втором случае нет необходимости шаблон int, поэтому сбой при отказе:

comp = 3.0 * i; // no operator*(int, complex<double>) 
4

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^