2017-11-29 5 views
1

私は2つのファイル(average.h、average.c)を持っています。構造体の定義では、私は#ifdef INTERNALを使用しています。ヘッダーファイルのstructメンバーに#defineマクロを使用すると、Cコードをコンパイルできません

average.cの内容は
#ifndef AVERAGE_H_ 
#define AVERAGE_H_ 


typedef struct str_internal { 
    int i1; 
    int i2; 
} internal; 

typedef struct str_speed { 
    int lowest; 
    int highest; 
#ifdef INTERNAL 
    internal i; 
#endif 
} speed; 


extern double average(speed twoStroke); 

#endif /* AVERAGE_H_ */ 

#include <stdio.h> 
#include "average.h" 

double average(speed twoStroke) { 
    double average = (twoStroke.highest + twoStroke.lowest)/2.0; 

#ifdef INTERNAL 
    average += twoStroke.internal.i1+twoStroke.internal.i2; 
#endif 

    return average; 
} 


int main() { 
    speed twoStrokeEngine; 
    twoStrokeEngine.highest = 70; 
    twoStrokeEngine.lowest = 50; 
#ifdef INTERNAL 
    twoStrokeEngine.internal.i1=20; 
    twoStrokeEngine.internal.i2=10; 
#endif 
    double avg = average(twoStrokeEngine); 
    printf("Average speed of two stroke engine is: %f", avg); 
    return 0; 
} 

私はこのコードをコンパイルしようと、 gccの-DINTERNAL -o AVERAGE.EXE average.c 私は次のように取得していますエラーメッセージ。

average.c:8:22: error: ‘speed {aka struct str_speed}’ has no member named ‘internal’ 
    average += twoStroke.internal.i1+twoStroke.internal.i2; 
        ^
average.c:8:44: error: ‘speed {aka struct str_speed}’ has no member named ‘internal’ 
    average += twoStroke.internal.i1+twoStroke.internal.i2; 
              ^
average.c: In function ‘main’: 
average.c:20:17: error: ‘speed {aka struct str_speed}’ has no member named ‘internal’ 
    twoStrokeEngine.internal.i1=20; 
       ^
average.c:21:17: error: ‘speed {aka struct str_speed}’ has no member named ‘internal’ 
    twoStrokeEngine.internal.i2=10; 

答えて

11

問題があります。メンバー変数にアクセスする必要があります。あなたの文はリンゴ@

twoStroke.i.i1+twoStroke.i.i2; 
+3

@バトシェバは、しかし、あなたのようなメンターと100Kクラブに参加する特権は、より尊敬されている、それについては2つのことはありません。 :) –

+0

はい、しかし、あなたはレフラーを捕まえなければなりません.... –

7

タイプミス:

twoStrokeEngine.internal.i1=20; 

はそうで

twoStrokeEngine.i.i1=20; 

となるべきです。 iは、ではなく、internalです。後者はstructtypedefです。

twoStroke.internal.i1+twoStroke.internal.i2; 
      ^^^     ^^^^ 

internalはタイプではなく、あなたがアクセスできるメンバーであると

+2

ようになっているはずですので、タイプinternalであるメンバ変数は、iです:これにそれを置くましょう:https://en.wikipedia.org/wiki/Relativity_of_simultaneity – Bathsheba

関連する問題