[C++] Utilisation des objets entre différentes classes

Bonjour,

En cours on a commencé un tp sur un lecteur de tag mp3 et trame mpeg, qu’on doit finir à la maison.

On a commencé par créer une nouvelle “application graphique Qt”, qui par défaut créé un classe mainwindow dérivant de qmainwindow, elle nous servira pour tout ce qui est affichage. Après on a créé une classe qmpegfile qui dérive de qfile, avec une surdéfinition de la méthode open, pour ouvrir nos mp3. Ensuite on a créé la classe qid3v1, qui va nous permettre de lire les tags id3v1 et id3v1.1. Il y a aussi une classe qid3v2 pour lire les tags id3v2 et une classe qmpeg pour lire les trames mpeg.

Dans la classe mainwindow on a un objet de type qmpegfile nommé mpegFile.
Dans la classe qmpegfile on a un objet de type qid3v1 nommé id3v1, un objet de type qid3v2 nommé id3v2 et un objet de type qmpeg nommé mpeg.

À l’utilisation dans le .cpp de la classe mainwindow pour récupérer le titre d’un morceau id3v1 on va y accéder de cette manière : mpegFile.id3v1.titre(), pour un récupérer la taille d’un id3v2 : mpegFile.id3v2.taille(), et pour récupérer le bitrate d’une trame mpeg : mpegFile.mpeg.bitRate().

Maintenant je veux calculer la taille d’une trame mpeg, j’ai la formule qui va bien et j’ai besoin de récupérer mpegFile.mpeg.bitRate() et mpegFile.mpeg.frequence() dans la classe qmpeg. Sauf que je ne sais pas comment je peux faire pour accéder à ces membres, j’ai l’erreur “invalid use of non-static data member ‘MainWindow::mpegFile’”.

J’espère avoir été clair, vous avez besoin des fichiers sources ? Si oui je les ajouterais.

Merci d’avance.

Euh oui là il va falloir les sources. À vue de nez je dirais que tu appelles tes mpegFile.mpeg.* à partir d’une méthode statique de MainWindow alors que mpegFile est un membre non statique, mais je dis juste ça parce que ma boule de cristal me l’a soufflé. :wink:

Voici le mainwindow.h, le qid3v1.h, le qidv2.h, le qmpeg.h et le qmpegfile.h.

Besoin des .cpp aussi ?

Ben au strict minimum la fonction où ton erreur se produit.

Voici le mainwindow.cpp, le qid3v1.cpp, le qid3v2.cpp, le qmpeg.cpp et le qmpegfile.cpp

Le problème se situe dans la fonction tailleTrame() du fichier qmpeg.cpp (tout en bas).

Hum…
Ta classe QMpeg ne contient aucun membre nommé mpeg, forcément il le trouve pas. Tu veux appeler bitRate() ? Appelle le directement.
Je comprends pas le raisonnement qui t’a conduit à vouloir passer par la variable inexistante mpeg.

Alors là je suis surpris car ma première idée a justement été de faire comme ça et j’obtenais un joli 0 et maintenant j’obtiens le 417 tant attendu.

J’ai vraiment du mal à comprendre pourquoi ça fonctionne maintenant et pas avant…

L’idée de passer par mpeg.bitRate() c’était justement parce que je n’arrivais pas à avoir la valeur 417 tant attendue.

En tout cas merci, ça me fait déjà un problème en moins !