未知大小错误

时间:2010-09-23 15:25:53

标签: c

我必须使用此代码但收到以下错误:

  

错误c2036'Complex_Z'未知大小

typedef struct Complex_Z{ 
 double r, i; 
} ;

void update_projection_zprimme(struct Complex_Z *X, struct Complex_Z *Y, struct Complex_Z *Z, 
   int numCols, int maxCols, int blockSize, struct Complex_Z *rwork, 
   struct primme_params *primme) {

   int j;    /* Loop variable  */ 
   int count;
  struct Complex_Z tpone = {+1.0e+00,+0.0e00};
  struct Complex_Z  tzero = {+0.0e+00,+0.0e00};

   /* --------------------------------------------------------------------- */
   /* Zero the work array to prevent floating point traps during all-reduce */
   /* --------------------------------------------------------------------- */

   for (j = 0; j < maxCols*blockSize; j++) {
      rwork[j] = tzero; //error c2036'Complex_Z 'unknown size
   }

3 个答案:

答案 0 :(得分:1)

您的代码:

typedef struct Complex_Z{ 
    double r, i; 
} ;

巧合地声明了类型struct Complex_Z,但未给出typedef的名称。具体而言,它不会将Complex_Z变为struct Complex_Z的同义词。

但是,我没有看到代码仅引用Complex_Z的位置 - 尽管报告的错误消息表明它可能缺少struct。由于代码是一个片段,我认为编译器运行的时间和代码显示给我们之间有一个变化。

答案 1 :(得分:0)

我怀疑这些代码片段来自多个源文件,并且for循环发生在Complex_Z的定义不可见的位置。

答案 2 :(得分:0)

因为您声明{C}

无效的typedef struct Complex_Z {}

它s / b:

typedef struct  {
double r, i;
} Complex_Z;

然后引用struct Complex_Z

何时应该引用Complex_Z

例如:

  struct Complex_Z tpone = {+1.0e+00,+0.0e00};
  struct Complex_Z  tzero = {+0.0e+00,+0.0e00};

s / b

  Complex_Z tpone = {+1.0e+00,+0.0e00};
  Complex_Z  tzero = {+0.0e+00,+0.0e00};