0

私は学校のCSプロジェクトに取り組んでいますが、この奇妙なエラーが発生しているようです。これはかなり役に立ちません。私のパートナーと私はそれを理解できないようです。

最初の関数宣言my.hfile( UArray2_new)。

その後に、関数宣言のあるすべての行で「*」トークンの前に「エラー:予期される」)'が繰り返されます。何か案は?私は空白のメインを私の中に含めたので、それがコンパイルの問題ではなかったことがわかるでしょう。コンパイルには「gcc-Wall-Wextra-WerrorUArray2.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では必要ありません) 。C++struct

これを回避する標準的な方法は、次のように使用することtypedefです。

typedef struct {
    int width, height;                                                     
} UArray2_T;
于 2012-09-18T15:21:22.397 に答える
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 に答える
0

C では、 sayはと呼ばれる新しい型を導入struct FooしませFoo。と呼ばれるタイプですstruct Foo

次のように、型名のエイリアスを作成できます。

typedef struct UArray2_T UArray2_T;

そうすることで、エラーが修正されるはずです。

于 2012-09-18T15:21:03.617 に答える