IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème de pointeur à travers des structures.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut Problème de pointeur à travers des structures.
    Bonjour je post ce sujet car j'ai une erreur à la compilation que je n'arrive pas à résoudre. Je voudrais mettre une valeur sounds puis batt puis canal mais l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    |26|erreur: lvalue required as left operand of assignment|
    sounds est une structure de Sons que vous trouvez plus bas et batt une structure de type Son en bas également. je voudrais mettre le 1 pour canal numéro lors du chargement du son de la batterie je n'arrive pas à résoudre mon problème.

    J'espère que quelqu'un à une idée sur la question. Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    void initialiser_sons(Sounds* sounds)
    {
     
        FMOD_RESULT resultat;
        // Creation et initalisetion de FMOD
        FMOD_System_Create(&sounds->system);
        FMOD_System_Init(sounds->system, 10, FMOD_INIT_NORMAL, NULL);
        FMOD_System_Create(&sounds->batterie);
        FMOD_System_Init(sounds->batterie, 1, FMOD_INIT_NORMAL, NULL);
     
        // Chargement de tous les sons
     
            // Chargement du son de batterie
        resultat = FMOD_System_CreateSound(sounds->batterie, "./sons_piano_acou/mi1_piano.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_CREATESTREAM, 0, &sounds->batt.son);
        sounds->batt.canal = 1;
            if ( resultat != FMOD_OK )
        {
            fprintf(stderr, "imossible de lire la musique de batterie\n");
            exit(EXIT_FAILURE);
        }
    }
     
    typedef struct Son Sound;
    struct Son
    {
        FMOD_SOUND* son;
        FMOD_CHANNEL** canal;
    };
     
    typedef struct Sons Sounds;
    struct Sons
    {
        Sound batt;
     
        FMOD_SYSTEM* system;
        FMOD_SYSTEM* batterie;
    };

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je pense que ceci irais déjà mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct
    {
        FMOD_SOUND* son;
        FMOD_CHANNEL** canal;
    } Sound;

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Je pense que ceci irais déjà mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct
    {
        FMOD_SOUND* son;
        FMOD_CHANNEL** canal;
    } Sound;
    Non. Pourquoi ?
    « Sound » est un nom de type, pas l'instance d'une variable.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Ici sound est bel et bien un nom de type.

    On pourra faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sound test;
    test.machin = truc; etc...
    Sur son code, il fait un typedef Son Sound avant même de déclarer Son, ça marche peut être, mais cela ne me semble pas très logique.

    Comme j'ai mis typedef struct {La_structure}, tout ce qui suit sera un type :
    typedef struct {La_structure}Sound, *Pointeur; seront ainsi des types.

    Après si on veut mettre un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct maillon
    {
          struct maillon * pointeur;
          //etc...
    }Maillon;

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Ici sound est bel et bien un nom de type.
    Non, relis mieux son code. sound est un nom de variable. C'est Sound qui est un nom de type (oui je sais, c'est super pourri comme règle de nommage mais bon, c'est lui qui code après...

    Citation Envoyé par Neckara Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct maillon
    {
          struct maillon * pointeur;
          //etc...
    }Maillon;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct s_maillon
    {
          struct s_maillon * pointeur;
          //etc...
    }t_maillon;
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Mais dans l'exemple de code, j'ai bel et bien mis une majuscule à Sound.

    Bon, il est vrai que j'ai oublié la majuscule lors de ma dernière phrase mais comme tu dis, le nommage n'est pas très pratique :

    Mettre une majuscule à la place d'une minuscule arrive très vite...

  7. #7
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 784
    Par défaut
    canal est du type FMOD_CHANNEL **, alors vouloir lui assigner un int, je comprends que le compilateur ne soit pas d'accord.

    En général, un canal est créé par FMOD_System_PlaySound:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FMOD_RESULT FMOD_System_PlaySound(
      FMOD_SYSTEM *  system,
      FMOD_CHANNELINDEX  channelid, 
      FMOD_SOUND *  sound, 
      FMOD_BOOL  paused, 
      FMOD_CHANNEL **  channel
    );
    C'est ce canal qui te permet, entre autre, de mettre ton son en pause, de changer son volume, de lui ajouter un DSP, etc... (attention à ne pas faire d'amalgame entre channelid et channel, ce sont 2 choses totalement différentes, bien qu'on y retrouve le mot channel à chaque fois)

    En passant, pourquoi créer 2 systèmes? Il me semble qu'un seul système de FMOD est parfaitement capable de gérer 2 sons... justement au travers du canal.

Discussions similaires

  1. Problème de Pointeur avec une structure pointée
    Par misterlagaffe dans le forum C
    Réponses: 25
    Dernier message: 03/02/2012, 09h17
  2. [Web Service] Problème SOAP communication à travers des tableaux
    Par yonialhadeff dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 08/12/2011, 16h58
  3. Réponses: 1
    Dernier message: 25/05/2011, 12h55
  4. Réponses: 6
    Dernier message: 27/10/2006, 14h27
  5. Problème de *pointeur sur des char
    Par Spartan03 dans le forum C++
    Réponses: 2
    Dernier message: 18/09/2005, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo