如果我定义如下的结构
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告诉我没有类型说明符.我不明白这里有什么问题.请你帮助我好吗?
如果您使用的是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)
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |