2010-04-15 95 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>)