初始typedef结构指针(C/C++)

Bry*_*yan 0 c++

如果我定义如下的结构

typedef struct Coder {
    float **data;
};
Run Code Online (Sandbox Code Playgroud)

为方便起见,我还定义了一个指向这个结构的指针

typedef Coder *AUTO;
Run Code Online (Sandbox Code Playgroud)

然后我必须通过调用来初始化它

AUTO  myInstance = new Coder;
Run Code Online (Sandbox Code Playgroud)

我打电话时出现问题

myInstance->data= NULL;
Run Code Online (Sandbox Code Playgroud)

VC 2010告诉我没有类型说明符.我不明白这里有什么问题.请你帮助我好吗?

Pie*_*aud 6

如果您使用的是C++,只需执行以下操作:

struct Coder
{
    float **data;
};

typedef Coder *AUTO;
Run Code Online (Sandbox Code Playgroud)

此外,您必须确保AUTO声明是在您声明之后完成的,struct或者您可以向前声明的声明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];
}
Run Code Online (Sandbox Code Playgroud)

您只能在命名空间范围内声明,而不能表达式.

在标准的§7.3.1/ 1中:

namespace-body:
     declaration-seq opt

其中,namespace-body可以选择只包含声明.

此代码将起作用:

// 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];
}
Run Code Online (Sandbox Code Playgroud)