2013-08-20 146 views
0

如果我定義像下面初始typedef結構指針(C/C++)

typedef struct Coder { 
    float **data; 
}; 

對於我的方便起見,我還定義一個指向這個結構

typedef Coder *AUTO; 

一個結構,然後我不得不最初它通過調用

AUTO myInstance = new Coder; 

我的問題出現時,我打電話

myInstance->data= NULL; 

VC 2010告訴我沒有類型說明符。我不明白這裏有什麼問題。你可以幫我嗎?

+0

你能發表錯誤代碼嗎? – billz

+0

@billz:「這個聲明沒有存儲類或類型說明符」 – Bryan

+0

我不能在我的編譯器上重複這個問題。你能發佈更多的代碼嗎?至少代碼圍繞'myInstance-> data = NULL;' – billz

回答

6

如果你在C++,只是做:

struct Coder 
{ 
    float **data; 
}; 

typedef Coder *AUTO; 

而且你必須確保AUTO聲明您struct或聲明的後面做,你可以前瞻性聲明struct


此外,有可能NULL是未定義的。

您可以用0替換它,或者只是看看我剛剛給你的鏈接。

這是live example


編輯: 你給了我們不能工作的代碼:

#include <tchar.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 
#include <conio.h> 
#include <iostream> 

struct Coder { 
     float **data; // 2-D matrix 
}; 
typedef Coder *AUTO; 

AUTO myFeatures = new Coder; 

myFeatures->data = NULL; // Forbidden 

int main(){ 
     myFeatures->data = new float *[2]; 
     myFeatures->data[0] = new float [2]; 
} 

只能在命名空間範圍的聲明,不表達這樣的。

在標準的§7.3.1/ 1

名稱空間結構體:
         聲明-SEQ 選擇

它說的命名空間人可以可選只包含聲明

此代碼將工作:

// Your includes 

struct Coder { 
     Coder() : data(NULL) {} // Constructor who initialize data to NULL 
           // via the member-initialization-list 

     float **data; // 2-D matrix 
}; 
typedef Coder *AUTO; 

AUTO myFeatures = new Coder; // Do you want to keep it in global ?? 
           // It's not a really good design 

int main(){ 
     // You should put your declaration here. 

     // myFeatures->data = NULL; useless now 
     myFeatures->data = new float *[2]; 
     myFeatures->data[0] = new float [2]; 
} 
+0

我猜'myInstance = new Coder;'這實際上是C++(標籤也有幫助)。無論如何,我不相信這是歐普的問題。 – WhozCraig

+0

請按照您的評論,它不起作用。 VC2010給我的信息「這個聲明沒有存儲類或類型說明符」 – Bryan

+0

@ user1432142你能告訴我你看到錯誤的那一行嗎? [** this example **](http://ideone.com/7ToQT4)顯示此代碼正在工作。 –

1

在C的typedef:

typedef int mango; 

現在你的芒果代表 「INT」 數據類型。

用戶定義的語法結構:

struct mystruct; 

使用的typedef:

typedef struct mystruct newtype; 

現在NEWTYPE代表你的結構MYSTRUCT。

你的typedef名稱缺失,

typedef struct Coder { 
    float **data; 
}Coder ; 
1
typedef struct Coder { 
    float **data; 
}Coder; 

都會好的。