2010-09-23 141 views
0

我要使用此代碼,但我得到收到以下錯誤:未知的尺寸誤差

error c2036'Complex_Z 'unknown size

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

修復您的格式。 – 2010-09-23 15:28:07

+0

請讓問題成爲一個真正的問題,並對代碼進行格式化以使其可以被讀取。 – Darron 2010-09-23 15:28:20

+4

爲什麼人們如此迅速地埋葬這件事?給新手休息一下。有一些代碼和一個問題。 – z5h 2010-09-23 15:29:19

回答

0

我懷疑,這些作品的代碼來自多個源文件,你的循環發生在Complex_Z的定義不可見的位置。

+0

現在我知道錯誤的原因,我有這個警告\t警告C4627:'#include「complex .h」':在尋找預編譯頭使用時跳過,所以它無法看到源代碼中的頭文件在這個任何幫助警告 – 2010-09-25 09:41:30

+0

@basma:移動'#include「stdafx.h」'行,使它成爲'#include'行中的第一行。 – 2010-09-28 18:29:28

+0

所以,我在這裏得到了最正確的答案(不知道特定的環境,以及預編譯頭文件的細節),但我得到了低估。 – Darron 2010-09-29 14:01:18

0

因爲你聲明typedef struct Complex_Z {}這是無效的 'C'

它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}; 
+0

這不是C++(但您的意見對於C++來說是準確的,對於C來說是不準確的)。 – 2010-09-23 16:07:57

+0

修復了編輯 – KevinDTimm 2010-09-23 18:04:04

1

您的代碼:

typedef struct Complex_Z{ 
    double r, i; 
} ; 

不約而同地聲明類型struct Complex_Z,但沒有給出該typedef的名稱。具體而言,它不會使Complex_Z成爲struct Complex_Z的同義詞。

但是,我沒有看到代碼僅指Complex_Z--儘管報告的錯誤消息表明它可能缺少struct。由於代碼是一個片段,我認爲在編譯器運行的時間和代碼顯示給我們之間發生了變化。