错误:左值作为赋值的左操作数需要左值

时间:2012-08-13 18:32:46

标签: c compiler-errors fftw

我有一个旧的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__,但我无法记住它。任何人都可以告诉我如何摆脱错误?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

将值分配给我之后执行的复数

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

答案 1 :(得分:0)

creal是一个函数,它返回一个值,你不能为值赋值。

例如,假设creal已评估为0.0,就像您要尝试的那样:

0.0 = c_zero + 1/15;

creal是C标准函数:

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

答案 2 :(得分:0)

如果你是对的,可以实施:

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

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

这很有用。 VC ++ 2010。 但它指向哪里?谁知道?

答案 3 :(得分: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.h I才能工作。

修改:假设c_zero只是0类型为复杂,可能正确的写作只是

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