2010-03-26 78 views
0
typedef union YYSTYPE { 
    int64_t   iConst;   // constant value 
    float   fConst;   // constant value 
    int    iAttrLocator; // attribute locator (rowitem for int/float; offset+size for bits) 
    int    iFunc;   // function id 
    int    iNode;   // node index 
} YYSTYPE; 

它看起來有效的給我,但CDT報告爲線int64_t iConst;如下:這裏的代碼段中是否有語法錯誤?

Multiple markers at this line: 
    - syntax error before "int64_t" 
    - no semicolon at the end of structure or union 

有兩個文件定義int64_t,一個是項目本身(sphinxstd.h)內,另一種是與項目無關的包括路徑D:/MinGW/include/stdint.h,是否是由此衝突造成的?

UPDATE

我選擇上面的代碼,然後通過CTRL - XCTRL - 小號CTRL - vCTRL - 小號 ,問題沒有了!

這裏有任何cdt用戶嗎?

+0

嗯,你在那裏使用了兩次相同的名字'YYSTYPE' - 可能是這個問題? – Cascabel 2010-03-26 00:59:11

+0

在C++中,typedef不是必需的。 – GManNickG 2010-03-26 01:07:39

+0

ctrl + x和ctrl + v之後錯誤消失了,一定是cdt的bug! – Mask 2010-03-26 01:12:06

回答

1

#include <stdint.h>

1

您應該說typedef union YYSTYPE_T爲聯合使用與typedef不同的名稱。

0
#include<stdint.h> 

typedef union { 
    // 
} YYSTYPE; 

以上typedef是你可能想要的。它將聲明新類型YYSTYPE

+0

上面的代碼是一個開源項目的資產 – Mask 2010-03-26 01:07:07

+1

與int64_t的錯誤是你可能沒有包含stdint.h – 2010-03-26 01:18:44

+0

它包含了,右鍵點擊'int64_t'將引用兩個2個文件,一個是'stdint.h' – Mask 2010-03-26 01:20:11

0

編譯器不知道如何處理int64_t。由於它不是現有的類型,因此它假定您正在嘗試聲明一個標識符。由於未定義的符號會破壞解析該行的編譯器部分,因此它會抱怨丟失的分號。

確保int64_t已定義。

即使您的IDE允許您右鍵單擊並轉到stdint.h,但這並不意味着它包含在內。許多IDE具有預先索引的標準頭文件以加快速度。

您可能只是想將其聲明爲long long並完成它。