[英]Initial typedef struct pointer (C/C++)
如果我定義如下的結構
typedef struct Coder {
float **data;
};
為了方便起見,我還定義了一個指向該結構的指針
typedef Coder *AUTO;
然后我必須通過調用來初始化
AUTO myInstance = new Coder;
我打電話時出現問題
myInstance->data= NULL;
VC 2010告訴我,沒有類型說明符。 我不明白這是什么問題。 請你幫助我好嗎?
如果您使用的是C ++ ,請執行以下操作:
struct Coder
{
float **data;
};
typedef Coder *AUTO;
另外,您還必須確保在聲明struct
之后執行AUTO
聲明,或者可以向前聲明 struct
。
同樣,有可能未定義NULL
。
您可以將其替換為0
也可以只看我剛剛給您的鏈接。
這是一個生動的例子 。
編輯:您給我們的代碼無法正常工作:
#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中:
名稱空間主體:
聲明順序選擇
表示命名空間主體可以選擇僅包含聲明 。
該代碼將起作用:
// 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];
}
在C typedef中:
typedef int mango;
現在您的芒果代表“ int”數據類型。
用戶定義的結構語法:
struct mystruct;
使用typedef:
typedef struct mystruct newtype;
現在,新類型代表您的結構mystruct。
您的typedef名稱丟失,
typedef struct Coder {
float **data;
}Coder ;
typedef struct Coder {
float **data;
}Coder;
會好的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.