2012-08-13 375 views
0

我有一個c程序的舊樣本,它使用fftw來求解微分方程。該方案的錯誤:需要作爲左操作數賦值的左值

兩行這給誤差在編譯時是:

creal(comp[i2+n_y*i1]) = c_zero + 1/15; 
cimag(comp[i2+n_y*i1]) = 0.0; 

這裏, comp爲與creal複數變量,cimag是其真實和虛部。它試圖在某個點(i2,i1)分配值。

這給錯誤

**error: lvalue required as left operand of assignment** 

我有這個問題也較早,並修復與__creal__或東西來取代creal,雖然我不能夠記住它。任何人都可以告訴我如何擺脫錯誤?任何幫助將不勝感激。

+0

這個'1/15'也看起來很奇怪。這將是整數除法。 – 2012-08-13 18:50:27

回答

1

要分配值的複數我做了以下這些工作

__real__(comp[i1+n*i2]) = ... 
__imag__(comp[i1+n*i2]) = .... 
0

creal是一個函數,它返回一個值,你不能給任何值賦值。

例如,假設creal進行評估,以0.0這就像如果你正在嘗試做的:

0.0 = c_zero + 1/15; 

creal是C標準功能:

#include <complex.h> 
double creal(double complex z); 
+0

那我怎樣才能訪問復變量的實部和虛部? – alekhine 2012-08-13 18:45:11

+0

@alekhine用'creal'和'cimag'。你想要做的是:'comp [i2 + n_y * i1] =(c_zero + 1/15)+ I * 0.0;' – ouah 2012-08-13 18:47:41

+0

並且記住'1/5'是一個整數除法並且它被評估爲'0 '。使用'1/5.0'有一個'雙'分區。 – ouah 2012-08-13 18:48:37

0

如果你是對的,這可以實施:

int * pointer_generator() 
{ 
    return (int *)malloc(8); 
} 

int main() 
{ 
    *(pointer_generator())=123234; 
    return 0; 
    } 

這項工作編輯。 VC++ 2010. 但它指向哪裏?誰知道?

+0

'new'不是C,而是C++。 – chris 2012-08-13 18:39:45

+0

好吧我馬上就會轉換malloc – 2012-08-13 18:41:17

+0

malloc也可以工作 – 2012-08-13 18:42:04

0

由於新的複數值的虛部應該是0你可以只是做

comp[i2+n_y*i1]= c_zero + 1/15; 

複雜對象在C一流citicens可直接分配。

如果你想添加另一個虛部

comp[i2+n_y*i1]= c_zero + 1/15 + 78 * I; 

你必須包括complex.hI工作。

編輯:假設c_zero只是類型爲複雜0可能是正確的寫作也只是

comp[i2+n_y*i1]= 1.0/15 + 78 * I;