簡體   English   中英

初始typedef結構指針(C / C ++)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM