erreur: le type de retour est un type incomplète
Je ne peux pas comprendre ce que veut dire:
error: return type is an incomplete type"
Je veux juste de retour de la struct. J'ai eu la séparation de deux canaux audio et je tiens à les retourner à l'aide d'une structure à l'aide de la fonction unique.
principal.c:
#include "functions.h"
...
struct LandR sepChannels_8( unsigned char *, unsigned long, unsigned char *, unsigned char *);
...
int main()
{
...
sepChannels_8( ptrSamples_8, n, ptrSamples_8_L, ptrSamples_8_R );
...
}
fonction.h:
...
struct LandR sepChannels_8( unsigned char *smp, unsigned long N, unsigned char *L, unsigned char *R )
{
struct LandR
{
unsigned char *L;
unsigned char *R;
};
struct LandR LRChannels;
int i;
if ( N % 2 == 0 )
{
L = malloc(N/2);
R = malloc(N/2);
}
else
if ( N % 2 == 1 )
{
L = malloc(N/2);
R = malloc(N/2);
}
for ( i = 0; i < N; i++ ) //separating
{
L[2 * i + 0] = smp[2 * i + 0];
R[2 * i + 0] = smp[2 * i + 1];
}
return LRChannels;
}
...
Est la struct défini à l'endroit que vous essayez de l'utiliser? C'est qu'une faute de frappe dans votre exemple de code ou êtes-vous vraiment essayer de définir le type de retour de la fonction au sein de la fonction elle-même?
Votre utilisation du
Votre utilisation du
.c
et .h
fichiers est assez rétro - vous avez le prototype de l' main.c
et le corps de la fonction dans function.h
. Mais vous avez réussi à mettre main
dans main.c
.OriginalL'auteur yulian | 2013-05-21
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser un type que vous avez besoin de le déclarer avant.
struct LandR
est déclaré localement àsepChannels_8
.Déplacer la déclaration dans la portée globale, si vous souhaitez exposer comme retourné type de fonction.
Aussi: Par convention, les prototypes et les constantes et les définitions de type aller dans
.h
fichiers. Les implémentations aller dans.c
fichiers..h
et de réaliser ces fonctions dans.c
?Oui, cela fonctionne.
OriginalL'auteur alk
Il semble que la déclaration complète de la structure n'est pas présent, seule une déclaration anticipée (comme
struct foo;
), de sorte que le type de retour est incomplète - vous ne pouvez pas le faire.struct LandR LRChannels
dans le début demain.c
puis passer LRChannels à une fonction comme argument et après tout retour de cette structure qui comprend 2 tableaux (canaux)?Définir la structure dans l'en-tête de la place. Inclure l'en-tête lorsque/en cas de besoin.
OriginalL'auteur
Un peu plus d'explications (qui devrait être disponible dans toutes les bonnes C tutoriel):
Mettre tout ce qui doit être présent en plusieurs lieux dans un
.h
fichier. C'est, principalementextern
déclarations de variables, les prototypes de fonction, typedefs, structures, énumérations, etc.Mettre le code de chaque fonction dans un
.c
fichier. Permettez-leur d'inclure le besoin de.h
fichiers et uniquement celles nécessaires.D'éviter que plusieurs d'inclusion des fichiers d'en-tête avec un inclure garde.
OriginalL'auteur glglgl