2009-07-05 3 views
2

Ich bin ein Anfänger in der Programmierung. leider habe ich ein projekt in C++, dass ich sein problem nicht kenne. das Programm ist ein wenig lang:Ursache von "Fehler: Größe von 'x' ist unbekannt oder Null" in C++?

#include <iostream.h> 
#include <conio.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <alloc.h> 
#include <time.h> 
#include <math.h> 
#include "vdsim.h" 
void gen01dat(long, int); 
void cnv_encd(int g[], long,int,int); 
int main() 
{ 
long data_len=10; 
int *out_array; 
long input_len=5; 
int g[2][3]; 

    void gen01dat(data_len,*out_array); 

    int in_array=*out_array; 
    void cnv_encd(g,input_len,in_array,*out_array); 
    cout<<"the out_array 2 is :\t"<<*out_array<<endl; 


    void gen01dat(long data_len, int *out_array) { 

    long t;   /* time */ 

    /* re-seed the random number generator */ 
    randomize(); 

    /* generate the random data and write it to the output array */ 
    for (t = 0; t < data_len; t++) 
      *(out_array + t) = (int)(rand()/(RAND_MAX/2) > 0.5); 

} 

void cnv_encd(int g[2][k],long input_len, int *in_array,int *out_array) 
{ 

    int m;      /* K - 1 */ 
    long t, tt;    /* bit time, symbol time */ 
    int j, k;     /* loop variables */ 
    int *unencoded_data;  /* pointer to data array */ 
    int shift_reg[K];   /* the encoder shift register */ 
    int sr_head;    /* index to the first elt in the sr */ 
    int p, q;     /* the upper and lower xor gate outputs */ 

    m = K - 1; 

    /* read in the data and store it in the array */ 
    for (t = 0; t < input_len; t++) 
      *(unencoded_data + t) = *(in_array + t); 

    /* zero-pad the end of the data */ 
    for (t = 0; t < m; t++) { 
      *(unencoded_data + input_len + t) = 0; 
    } 

    /* Initialize the shift register */ 
    for (j = 0; j < K; j++) { 
      shift_reg[j] = 0; 
    } 

    sr_head = 0; 

    /* initialize the channel symbol output index */ 
    tt = 0; 

    for (t = 0; t < input_len + m; t++) { 
      shift_reg[sr_head] = *(unencoded_data + t); 
      p = 0; 
      q = 0; 
      for (j = 0; j < K; j++) { 
       k = (j + sr_head) % K; 
       p ^= shift_reg[k] & g[0][j]; 
       q ^= shift_reg[k] & g[1][j]; 
      } 

      /* write the upper and lower xor gate outputs as channel symbols */ 
      *(out_array + tt) = p; 
      tt = tt + 1; 
      *(out_array + tt) = q; 
      tt = tt + 1; 


      sr_head -= 1; /* equivalent to shifting everything right one place */ 
      if (sr_head < 0) /* but make sure we adjust pointer modulo K */ 
       sr_head = m; 

    } 

    /* free the dynamically allocated array */ 
    free(unencoded_data); 

} 

    return 0; 
} 

der Compiler gibt diesen Fehler:

error: size of 'gen01'is unknown or zero in function main() 
error: size of 'cnv_encd'is unknown or zero in function main() 

Ich weiß nicht, das, was ist dieser Fehler bedeuten? Dank für Ihre Hilfe

+0

Ich sehe nicht, wie der gepostete Code diese Fehlermeldungen produzieren konnte, obwohl es ein wenig schwer zu sagen ist !. Bitte kompilieren Sie die COMPLETE-Fehlermeldungen mit den Zeilennummern, an denen die Fehler auftreten. –

Antwort

13

Sie können nicht verschachtelt werden Funktionen in C++, so versuchen, die Definitionen von cnv_encd() und gen01dat() aus main() bewegen.

Auch rufen Sie die Funktionen falsch:

void gen01dat(data_len,*out_array); 

sollte
gen01dat(data_len,out_array); 

und Sie initialisiere nicht out_array bevor Sie es verwenden (dieser Fehler nicht ein Kompilierung ist, aber es wird mache dein Programm zum Absturz).

Ihr Anruf an cnv_encd() ist in ähnlicher Weise falsch. Außerdem deklarieren Sie cnv_encd(), um verschiedene Parameter an verschiedenen Stellen zu verwenden: Vergleichen Sie die Deklaration vor main() mit der Definition, die Sie später angeben.

3

Sie versuchen, gen01dat & cnv_encd Funktionen in Haupt aufrufen. Ihre Aufrufsyntax ist jedoch falsch.

void gen01dat(data_len,*out_array);

sollte gerade auch

gen01dat(data_len,*out_array);

Das gleiche folgt für den anderen Funktionsaufruf sein.

Mit Blick auf Ihren Code, selbst nachdem Sie diese behoben haben, werden Sie auf andere Warnungen oder Fehler stoßen. Aber da du lernst, werde ich dich herausfinden lassen.

Update: Ich habe die verschachtelten Funktionen nicht innerhalb der wichtigsten gesehen. Das ist auch falsch. Ich vermute allerdings, dass die fehlende schließende Klammer ein Tippfehler ist.

+0

Eigentlich denke ich, das ist die Definition der Funktionen dort, kein Anruf an sie. – marcc

+0

Es gibt eine Deklaration kurz nach #includes, also ich denke, er versteht, was eine Deklaration ist. Dann versucht er IMO, ruft sie an, indem er die tatsächlichen Parameter angibt. Die eigentliche Definition folgt ein wenig nach unten.Wenn Sie den Code sehen, ich denke, dass das OP nur eine schließende geschweifte Klammer fehlt, um das Ende von Haupt anzuzeigen. –

+0

Die 'return 0;' und die schließende Klammer von 'main()' sind nach den Definitionen der beiden anderen Funktionen. – dave4420

1

Das Schlüsselwort "void" wird nur verwendet, wenn eine Funktion deklariert wird. Es teilt dem Compiler mit, dass diese Funktion keinen Wert zurückgibt.

Sie verwenden es also nur, wenn Sie Ihre Funktionen deklarieren und implementieren. Wenn Sie sie anrufen, benutzen Sie einfach ihren Namen und Argumente. Genau wie Aditya Sehgal gezeigt hat.

Und Sie müssen Ihre Deklarationen ändern. Sie müssen die Argumentvariablennamen enthalten und nicht nur den Typ der Variablen.

+0

Wir können "void" auch beim Aufruf einer Funktion verwenden. Etwas wie (void) Function(); –

+0

Auch beim Deklarieren eines Zeigers. –