0

我正在为学校做一个 CS 项目,但我似乎遇到了这个非常无用的奇怪错误。我和我的搭档似乎无法弄清楚。

它在第一个函数声明我的 .h 文件( UArray2_new)。

紧随其后的是在函数声明的每一行上重复的“错误:预期的 ')' 之前的 '*' 标记”。有任何想法吗?我在我的里面包含了一个空白的 main,所以你可以看到它不可能是一个编译问题。我使用“gcc -Wall -Wextra -Werror UArray2.c”进行编译。

//UArray2.h                                                                  
#include <stdlib.h>
#include <stdio.h>


#ifndef UARRAY2_INCLUDED
#define UARRAY2_INCLUDED

struct UArray2_T{
    int width, height;                                                     
};   

extern UArray2_T * UArray2_new(int height, int width, int size);
extern void UArray2_free(UArray2_T * uarray2);                                                                
extern void * UArray2_at(UArray2_T * uarray2, int column, int row);
extern int UArray2_size(UArray2_T * uarray2);
extern int UArray2_columns(UArray2_T * uarray2);
extern int UArray2_rows(UArray2_T * uarray2);
static int UArray2_index(UArray2_T * uarray2, int col, int row);

#endif

这是.c文件

//UArray.c                                                                          
#include <stdlib.h>
#include <stdio.h>
#include "UArray2.h"                                                             

int main()
{

     return 0;
}

UArray2_T * UArray2_new(int height, int width, int size)
{
    T newArray=malloc(sizeof(UArray2_T));
    newArray->height=height;
    newArray->width=width;
    (void) size;                            
    return newArray;
}

void UArray2_free(UArray2_T * uarray2)
{
    (void) uarray2;
    //need to write                                                                 

}

void * UArray2_at(UArray2_T * uarray2, int column, int row)
{

    (void) uarray2;
    int index=UArray2_index(uarray2, column, row);
    (void) index;
    //if(index>0 && index<=column*row)                                              
    //return UArray_at(uarray2->UArray, index);                                     
    //else                                                                          
    //throw an error                                                                
    char * k="hi"; //dummy variables
    return k;
}

int UArray2_size(UArray2_T * uarray2)
{
    //UArray_size(uarray2->UArray);                                                 
    return 0;
}
int UArray2_columns(UArray2_T * uarray2){
    return uarray2->width;
}
4

4 回答 4

1

在任何地方UArray2_T *,您都应该将其替换为struct UArray2_T *. 这struct您引用类型时,关键字是必需的C(但不是in )。C++struct

避免这种情况的标准方法是使用typedef,例如:

typedef struct {
    int width, height;                                                     
} UArray2_T;
于 2012-09-18T15:21:22.397 回答
0

在 C 中,sayingstruct Foo没有引入一个新的类型叫做Foo. 该类型称为struct Foo.

您可以为类型名称创建别名,如下所示:

typedef struct UArray2_T UArray2_T;

这样做应该可以解决您的错误。

于 2012-09-18T15:21:03.617 回答
0

我会将结构移动到 .c 文件中。这将隐藏结构的内部结构。

struct UArray2_T { // move to the .c file
    int width, height;                                                     
};

向 .h 文件添加前向声明,如下所示:

struct UArray2_T;
于 2012-09-18T15:25:11.990 回答
0

您需要 typedef 您的结构,或在任何地方使用 struct 关键字。我喜欢这种风格:

typedef struct {
    int data1;
    char data2;
} newtype;
于 2012-09-18T15:25:32.833 回答