2010-04-15 68 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 * I”“符*” 这里有什么问题,为什么我不能乘以即时常量? b *我工作。

回答

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