2009-07-05 6 views
2

Je suis un débutant en programmation. malheureusement j'ai un projet en C++ que je ne connais pas son problème. le programme est un peu long:Cause de "erreur: sizeof 'x' est inconnu ou zéro" en 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; 
} 

le compilateur donne cette erreur:

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

Je ne sais pas ce que signifie cette erreur? merci pour votre aide

+0

Je ne vois pas comment le code posté pourrait produire ces messages d'erreur, même si c'est un peu difficile à dire! Veuillez recompiler et rediffuser les messages d'erreur COMPLETE avec les numéros de ligne sur lesquels les erreurs se produisent. –

Répondre

13

Vous ne pouvez pas imbriquer des fonctions en C++, essayez donc de déplacer les définitions de cnv_encd() et gen01dat() sur main().

En outre, vous appelez les fonctions à tort: ​​

void gen01dat(data_len,*out_array); 

devrait être

gen01dat(data_len,out_array); 

et vous n'initialisez out_array avant de l'utiliser (ce n'est pas une erreur de compilation, mais il faire planter votre programme). Votre appel à cnv_encd() est également faux. De plus, vous déclarez cnv_encd() pour prendre différents paramètres à différents endroits: comparez la déclaration avant main() à la définition que vous donnerez plus tard.

3

Vous essayez d'appeler gen01dat & fonctions cnv_encd dans main. Cependant, votre syntaxe d'appel est incorrecte.

void gen01dat(data_len,*out_array);

devrait juste être

gen01dat(data_len,*out_array);

Le même suit pour l'autre appel de fonction également.

En regardant votre code, même après avoir corrigé ceux-ci, vous allez rencontrer d'autres avertissements ou erreurs. Mais puisque tu apprends, je te laisserai les comprendre par toi-même.

Mise à jour: Je n'ai pas vu les fonctions imbriquées dans le main. C'est faux aussi. Cependant, je soupçonne que l'accolade de fermeture manquante est une faute de frappe. Le mot clé "void" est seulement utilisé lors de la déclaration d'une fonction

+0

En fait, je pense que c'est la définition des fonctions là-bas, pas un appel à eux. – marcc

+0

Il y a une déclaration juste après #includes, donc je suppose qu'il comprend ce qu'est une déclaration. Puis il essaie d'IMO, appelle-les en donnant les paramètres réels. La définition actuelle suit un peu plus bas.Si vous voyez le code, je pense que l'OP manque juste une accolade fermante pour signifier la fin de la main. –

+0

L'accolade 'return 0;' et de fermeture de 'main()' sont après les définitions des deux autres fonctions. – dave4420

1

Il indique au compilateur que cette fonction ne renvoie aucune valeur. Vous ne l'utilisez donc que pour déclarer vos fonctions et les implémenter. Quand vous les appelez, vous utilisez simplement son nom et ses arguments. Juste comme Aditya Sehgal a pointé.

Et vous devez changer vos déclarations. Ils doivent avoir les noms des variables d'argument, et pas seulement le type des variables.

+0

Nous pouvons utiliser "void" lors de l'appel d'une fonction aussi. Quelque chose comme (vide) Fonction(); –

+0

Également lors de la déclaration d'un pointeur. –

Questions connexes