我必须使用此代码但收到以下错误:
错误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
}
答案 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};