0

コードの作成はほぼ完了しましたが、「curtemp: undeclared identifier」というエラーが表示されます。および ' prevtemp: undeclared identifier' および ' missing ';' before type' (最後のエラーは "float curtemp = current->temp;" の行にあります。コードの何が問題なのかわかりません。双方向リンク リストからいくつかの要素を削除しようとしていますが、その要素内の温度は、前の要素の温度よりも 5 高いか 5 低いです。

ここに私の.cファイルがあります:

void remove_error(Dlist *list){

    DlistElmt *current;

    current = list->head; 
    //initializes ints for comparison
    float curtemp = current->temp;
    float prevtemp = current->temp;
    //now moves current to next data
    current = current -> next;

    //begins while loop for comparison of data
    while(current != NULL){
        curtemp = current -> temp;

        if((curtemp >= (prevtemp +5)) || (curtemp <= (prevtemp-5))){
            //removes current from the list
            dlist_remove(list, current);

            current = current->next;

        }
    }

 }

ここに私の構造体要素ファイルがあります:

typedef struct DlistElmt_ {

    int hour;
    int min;
    float temp;

    struct DlistElmt_ *prev;
    struct DlistElmt_ *next;

 } DlistElmt;
4

3 に答える 3

0

私の推測では、 DlistElmtが定義されているファイルを含めていませんが、DlistElmt の宣言を含めているため、コンパイラは DlistElmt があることを認識しているため、それへのポインターを使用できますが、DlistElmt の内容で何かをしようとするとコンパイラはそれに対して何もできません。

于 2012-10-10T01:54:55.130 に答える
0

C89 または C90 では、ブロック (関数またはローカル ブロック) の先頭で変数を宣言する必要があります。しかし、C99 では、この制限は適用されません。したがって、おそらく、上記の Karthik T と japreiss の提案が当てはまるはずです。

float 変数の宣言だけを関数の先頭に移動し、後で割り当てることで試すことができます。

于 2012-10-10T01:35:09.257 に答える
0

あなたのコードは ISO 標準 C89 ではなく、C89 コンパイラ (Visual C など) を使用していると思われます。いくつかの行を再コーディングする必要があります:

DlistElmt *current; 
float curtemp, prevtem;

current = list->head;  
//initializes ints for comparison 
curtemp = prevtemp = current->temp; 

そうするために。

これはgccC89 の拡張機能であり、C99 の標準であり、ブロックの先頭だけでなく途中でも宣言できるようにする C++ の機能でもあります。これは、「純粋な」ISO C89 コンパイラに遭遇すると、多くの人々を混乱させます。

また、ロジックに何かが欠けているようです。 prevtemp一度設定すると更新されません。前を意味する場合prev、ループ内に入れたいと思います:

prevtem = curtemp;
curtemp = current -> temp;          

その場合、初期化手順の一部が冗長になります。この種のバグを回避する方法については、Gries の「The Science Of Programming」を読んでみてください。

于 2012-10-10T01:48:17.760 に答える