2017-12-18 27 views
-1

를 작동합니다 헤더 "show.h"를 사용합니다. 그것을 빌드하려고하면 오류가 발생합니다. 'show'에 대한 정의되지 않은 참조. show 함수는 0-10의 배열 h []와 0-20의 배열 d []를 인쇄해야합니다. show.c를 가져올 때 문제없이 컴파일 할 수있었습니다.C : 나는이 기능은 "show.c"라는 별도의 파일에 선언) ( 를 기능 쇼를 부르는 main.c의이</p> <p>: 정의되지 않은 참조 나는 내 프로그램에 문제가

Main.c 파일 :`

#include "show.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 


int c, e, f; 
int h[11], d[21]; 

/* 
User-Eingabe der zu generierenden "Zufallszahlen" 
*/ 
int einlesen() 
{ 
    printf("Bitte Anzahl erzeugter Zahlen eingeben: \t"); 
    scanf("%i", &anzahl); 
    printf("\n"); 
    if(anzahl < 1) 
    { 
     printf("Bitte geben Sie eine positive natuerliche Zahl ein!"); 
     einlesen(); 
    } 
    return anzahl; 

} 

/* 
Generierung und Verteilung der Zufallszahlen in Arrays für absolute Häufigkeiten der 
Zahlen von 0 bis 10 und der Differenzen von aktueller Zahl und vorangegangener 
*/ 
void zuweisen(int anzahl) 
{ 
    for(int x = 0; x < anzahl; x++) 
    { 

     c = rand()%11; 


     switch(c) 
     { 
      case 0: h[0]++;  break; 
      case 1: h[1]++;  break; 
      case 2: h[2]++;  break; 
      case 3: h[3]++;  break; 
      case 4: h[4]++;  break; 
      case 5: h[5]++;  break; 
      case 6: h[6]++;  break; 
      case 7: h[7]++;  break; 
      case 8: h[8]++;  break; 
      case 9: h[9]++;  break; 
      case 10: h[10]++; break; 
     } 

     if(x!=0) 
     { 
      f = e-c; 

      switch(f) 
      { 
       case -10: d[0]++;  break; 
       case -9: d[1]++;  break; 
       case -8: d[2]++;  break; 
       case -7: d[3]++;  break; 
       case -6: d[4]++;  break; 
       case -5: d[5]++;  break; 
       case -4: d[6]++;  break; 
       case -3: d[7]++;  break; 
       case -2: d[8]++;  break; 
       case -1: d[9]++;  break; 
       case 0: d[10]++; break; 
       case 1: d[11]++;  break; 
       case 2: d[12]++;  break; 
       case 3: d[13]++;  break; 
       case 4: d[14]++;  break; 
       case 5: d[15]++;  break; 
       case 6: d[16]++;  break; 
       case 7: d[17]++;  break; 
       case 8: d[18]++;  break; 
       case 9: d[19]++;  break; 
       case 10: d[20]++; break; 
      } 
     } 
     e = c; 
    } 
} 



/* 
Abrufen der Erstellten Methoden und Ausführung 
*/ 
int main() 
{ 
    srand(time(0)); 
    zuweisen(einlesen()); 
    printf("Verteilung der Werte von 0 bis 10 bei %i Zufallszahlen.\n\n", anzahl); 
    show(h, 0, 10); 
    printf("Verteilung der Differenzen von -10 bis 10 bei %i Zufallszahlen.\n\n", anzahl); 
    show(d, -10, 10); 
    return 0; 
} 

show.h :

void show(); 
int relativ(); 
int d[], anzahl, h[]; 
` 

show.c :

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include "show.h" 

int r; 
double o; 

/* 
Berechnung der Relativen Häufigkeit 
*/ 
int relativ(int p[], int cnt, int s) 
{ 
    o = (double) p[s]/(double) cnt; 
    r = o * 100; 

    return r; 

} 

/* 
Funktion zur Visualisierung der Berechneten Daten 
*/ 
void show(int h[], int von, int bis) 
{ 

    for(int x = 0; x <= (bis - von); x++) 
    { 
     printf("%i\t", x+von); 
     printf(" : "); 
     printf("%10i\t", h[x]); 
     printf("(%i%%)\t", relativ(h, anzahl, x)); 
     for(int y = 0; y < relativ(h, anzahl, x); y++) 
     { 
      printf("XXX"); 

     } 
     printf("\n"); 
    } 
    printf("\n\n\n"); 
} 
+1

프로그램을 제작하고 있음을 보여줄 수 있습니까? 컴파일/링크 명령에'show' 소스/오브젝트 파일을 포함시켜야합니다. –

+0

연결하는 데 사용하는 명령을 표시하십시오. 이것은'cc -o program main.c show.c' (라이브러리, 옵션 등) 라인을 따라야합니다. –

+0

@JonathanLeffler'cc'? 그 soooo 1980s :) –

답변

0

표시

나는 내 문제를 찾을 수 없습니다

로 정의됩니다.

show(h, 0, 10); 

당신은 아마 C++로 컴파일하고 컴파일러/링커가 3 개 매개 변수가 쇼의 버전을 찾을 수 없습니다 :

void show(); 

쇼라고한다.

C로 컴파일하는 경우 매개 변수 사양이없는 함수 (예 : ())는 모든 유형의 매개 변수를 수락 할 수 있으므로 링커는 show을 찾을 수 있기 때문에 받아 들일 수 있습니다 최신 표준에서는 더 이상 허용되지 않습니다).

참고 : 메이크 파일에서 링크 할 개체 목록에 show.o를 포함시켜야합니다.