struct C中未声明的变量

时间:2014-10-05 18:34:46

标签: c struct

我的结构代码就像这样:

typedef struct  
{  
    int w;  
    int h;  
    float m[w][h];  
} Matrix;

但我只是得到了这个错误:
“错误:'w'在这里未声明(不在函数中)”
“错误:'h'未声明(不在函数中)”

如何正确编码此结构?

2 个答案:

答案 0 :(得分:1)

Muli的答案显示了如何解决您的问题。以下是编译失败的解释:编译器不知道为每个Matrix结构声明分配多少内存的边界,因为在编译时不知道维度(w和h的值)。如果在构建时已知m阵列的最大尺寸,则可以使用预定义的大小结构,如

#define MAX_W 10
#define MAX_H 10

struct {
   int w;  
   int h;  
   float m[MAX_W][MAX_H];  
};

struct matrix my_matrix;
...

之后,您可以根据需要声明和使用矩阵结构。 这种方法的缺点是分配的内存超过了必要的成本。

遵循linux内核编码gudelines,我不喜欢使用typedef,因为它们倾向于使数据定义不透明:如果某些东西在其他地方声明为typedefined类型,理解这是一个结构稍微复杂一些。

答案 1 :(得分:0)

您的代码无法编译。 C与Java和高级语言不同。

typedef struct  
{  
    int w;  
    int h;  
    float **elements;  
} Matrix;


Matrix* initializeMatrix(int w,int h){

 Matrix * matrix;
 int i,j;
 if( NULL == (matrix = malloc(sizeof(Matrix))) ) {
   printf("malloc failed\n");
   return NULL;
 }

 matrix.w=w;
 matrix.h=h;

 if( NULL == (matrix->elements = malloc(w * sizeof(float*))) ) {
   printf("malloc failed\n");
   free(matrix);
   return NULL;
  }

 for(i = 0; i< matrix.w ; i++){
  if( NULL == (matrix->elements[i] = malloc(h * sizeof(float))) ) {
   printf("malloc failed\n");
   for(j = i ; j>=0 ; j--)
    free(matrix->elements[j]);
   free(matrix);
   return NULL;
  }
 }

 return matrix;
}