2017-11-29 2 views
1

두 파일 (average.h, average.c)이 있습니다. 구조의 정의에서 나는 #ifdef INTERNAL을 사용했습니다. average.c의헤더 파일의 struct 멤버에 #define 매크로를 사용할 때 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

@ :이 해당을 넣어 보자 밧세바 (Bathsheba)는 그렇지만, 당신 같은 멘토와 함께 100K 클럽에 가입 할 수있는 특권은 더 존경 할 만합니다. :) –

+0

그래,하지만 너는 레 플러를 잡아야 해 ..... –

7

오타 :

twoStrokeEngine.internal.i1=20; 

등등

twoStrokeEngine.i.i1=20; 

및되어야한다. i이 아니며internal입니다. 후자는 struct의 경우 typedef입니다.

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

internal이 형이 아닌 액세스 할 수있는 구성원으로

+2

처럼 보일 것이다, 그래서 형 internal입니다 멤버 변수, i입니다 : https://en.wikipedia.org/wiki/Relativity_of_simultaneity – Bathsheba

관련 문제