CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

J´aide les personne en C/C++

Fvirtman
Fvirtman
Niveau 10
03 février 2007 à 00:35:51

Supposition uniquement :

ta classe Player hérite de Qwidget.
Peut etre que Qwidget déclare une méthode virtuelle pure appelée vtable que tu n´as pas implémenté...

Je ne connais pas trop les messages d´erreur de gcc, encore moins en français...

guyver2
guyver2
Niveau 10
03 février 2007 à 00:55:34

merci pour la piste mais non.
en cherchant
référence indéfinie vers « vtable for
sur google, on voit que ce message d´erreur n´est pas specifique a mon cas... De la a savoir d´ou il vient et comment y remedier...

KeepSmile
KeepSmile
Niveau 4
03 février 2007 à 10:49:42

Bonjour,

Je ne connais pas du tout Qt, mais en cherchant un peu, j´ai vu que la méthode Q_OBJECT devait être compilé avec MOC avant :) sinon ca génére le même style d´erreur, regarde un peu comment on fait sur google.

Tiens :
http://www.codeforge.com/m/tutorials/QtTutorialSRC.html

Si ca peut t´aider ;)

godrik
godrik
Niveau 30
03 février 2007 à 11:31:18

KeepSmile doit avoir raison, il y a un probleme a la compilation. Je ne sais pas bien ce que Q_OBJECT fait exactement, mais il est probable que si ce n´est pas compilé a la qt ca ne marche pas.

En passant, c´est relativement enervant que le makefile de l´exemple ne prévoit pas de le faire.

guyver2
guyver2
Niveau 10
03 février 2007 à 14:18:19

encore merci mais je suis passé par qmake pour generer le makefile, puis j´ai bidouillé un poil le makefile généré car il contenait des erreurs...

la premiere partie de la compilation avec le moc se passe correctement.

godrik >>
Q_OBJECT sert a prévenir le moc que la classes contenant ce mot-clé contient des slots/signaux et nécessite un pré-traitement avant d´etre compilé par g++.

bon je vais m´y remetre, je vais bien finir par trouver un truc...

godrik
godrik
Niveau 30
03 février 2007 à 14:28:57

ah... ca me rappelle quand je mettais du preprocesseur C dans mon code java... :)

guyver2
guyver2
Niveau 10
03 février 2007 à 15:32:19

on a tous des moment de fatigue...

dnob700
dnob700
Niveau 10
03 février 2007 à 16:02:06

la vtable c´est un membre de la classe créé automatiquement par le compilo dès qu´une classe a des fonctions virtuelle, qui permet à l´exécution de savoir quelle fonctions doit être appellé pour un membre donnée, même si la classe a été cast vers un type dont elle a hérité (et qui avait des fonctions virtuelles donc).

Ce genre d´erreur, est un problème connu en C++ dès qu´il y a un peu trop d´objet. J´avais eu ça il y a longtemps et je crois qu c´est LGV qui m´avait donné la solution. Malheureusement, je ne me souviens plus de la cause ...

Mais je me demande s´il n´y a pas une histoire comme quoi le contructeur d´une classe qui hérite d´une classe avec des fonctions virtuelles doit être virtuelle, ou alors son destructeur, ou un truc comme ça.

Essaye de déclarer Player ou ~Player, ou les deux comme virtuel.

Grobourrin_II
Grobourrin_II
Niveau 10
03 février 2007 à 16:10:52

Bonzour!
J´ai une chtite question, là, toute bête.
J´aimerais bien qu´arrivé à un certain point, mon programme le relance à partir d´un autre endroit...
En gros:

[Instructions blah blah blah and blah blah blah]
"Tu veux recommencer tes Instructions blah blah blah and blah blah blah?" [Là, oui, non.]
Si oui:
Retourner au début du [Instructions blah blah blah and blah blah blah]

Et je bloque sur cette dernière ligne :-)
A part mettre un while au début, je ne vois pas comment faire, et ça m´embête d´en mettre un parce que ça fait un bazar monstre ^^"

godrik
godrik
Niveau 30
03 février 2007 à 16:47:01

en effet, les constructeur ne doivent pas etre virutel, mais les destructeur doivent l´etre. Sur le meme genre d´idée on en doit pas appeller de fonction virtuel dans un constructeur.
en outre cette erreur ne genere pas de message d´erreur a la compilation:

godrik@skynet-ubuntu:test$ cat toto.cpp

  1. include <iostream>

class toto
{
public:
toto(){}
~toto(){std::cout<<"totodes"<<std::endl;}
};

class tata : toto
{
public:
tata(){}
~tata(){std::cout<<"tatades"<<std::endl;}
};

int main()
{
tata t;
}
godrik@skynet-ubuntu:test$ g++ -Wall toto.cpp
godrik@skynet-ubuntu:test$ ./a.out
tatades
totodes

guyver2
guyver2
Niveau 10
03 février 2007 à 17:06:59

meric je teste ça de suite.

grobourin >>
c´est a ça que servent les fonctions
tu fais une fonction du genre:
fonction blabla
{
[Instructions blah blah blah and blah blah blah]
}

et la ou tu veux mettre ton "bazard" tu mets:
int continuer = 1;
while (continuer)
{
blabla; // appel a ta fonction
printf("on continue ? (1/0) :");
scanf("%d",&continuer);
} // fin du while

guyver2
guyver2
Niveau 10
03 février 2007 à 17:17:15

apres test, il s´avere que bien entendu avec le constructeur Player::Player() en virtual ça passe pas (un constructeur ne doit pas etre virtuel)
pour ce qui est du destructeur, qu´il soit virtual ou nom, ça ne change rien : toujours les memes erreurs...

[HS] : godrick >> comment tu fais pour avoir dans ton bash, le nom du dossier courant (juste ":test")? Cette question n´est valable que si le dossier test n´est PAS dans ton home/

Grobourrin_II
Grobourrin_II
Niveau 10
03 février 2007 à 18:35:44

Okidoki :ok:
Merci beaucoup ^^

godrik
godrik
Niveau 30
03 février 2007 à 18:58:05

godrik@skynet-ubuntu:test$ echo $PS1
${debian_chroot:+($debian_chroot)}\u@\h:\W\$

pour plus d´info, lire man bash a propos du prompt)

guyver2
guyver2
Niveau 10
03 février 2007 à 19:05:24

ok merci, ça marche nickel (j´avais mis un w minuscule)

trunks_the_boss
trunks_the_boss
Niveau 9
09 février 2007 à 15:28:16

bonjour! :)

j´ai 3 problemes :svp:

alors la premiere est que je sais me servir des pointeurs mais je ne sais pas dans quel cas s´en servir. Pouvez vous m´aider?

deuxieme, je sais me servir des fonctions mais pareil, je sais pas quand s´en servir.

et derniere, je ne sais pas faire de conditions avec les chaines de caractères.

Voila, :merci: .

PS: et SVP, aider vous meme car les sites c´est embetant.

godrik
godrik
Niveau 30
09 février 2007 à 16:26:51

je n´ai pas bien compris le PS.

1/ Les fonctions.

On se sert des fonctions pour deux choses:
-Découper son code en bloc indépendant. Ainsi il est plus facile de s´y retrouver dedans.
-Factoriser des portions de code similaire. En effet, supposons que tu ai besoin de faire le meme traitement a deux endroits différent de ton code (par exemple, compter le nombre de a dans une chaine de caractere), alors il sera plus simple de faire une fonction faisant ce traitement que de recopier le code plusieurs fois. Cela pour plusieurs choses: Ce n´est ecrit qu´une seule fois donc on gagne du temps et de la place. ERt si on a fait une erreur, il suffit de la corriger a un seul endroit et on la corrigera partout.

2/ les pointeurs.
On utilise généralement les pointeurs pour des raisons de dynamisme. Prennons le cas d´un RTS, le programme ne sait pas au démarrage du programme combien il y aura d´unité a l´écran. Il est donc impossible de dire dans le programme combien d´unité il y a aura. Cette information n´existe pas encore. Il faudra donc obtenir de la mémoire a posteriori. L´accès a la mémoire n´est possible que par l´utilisation de pointeur.
On peut aussi utiliser les pointeurs pour faire retourner plus qu´une valeure a une fonction. En effet, en C, une fonction ne retourne qu´une seule valeure. Que faire si on voulait en retourenr deux.
Solution 1. Utiliser une structure avec deux champs.Pour plein de raison que je n´ai pas envie de détailler, on ne afit pas ca habituelement.
Solution 2: donner a cette fonction une zone mémoire ou elle pourra écrire son résultat.
On écrira ainsi par exemple (comme c´est le cas sur nintendo DS) la division de a par b:
void division (int a, int b, int* quotient, int* reste);

3/ chaine de caractere. On manipule les chaines de caractere en C avec les fonction de string.h consulte ta doc a strcpy et strcmp

Fvirtman
Fvirtman
Niveau 10
09 février 2007 à 16:37:47

"je n´ai pas bien compris le PS"

--> Moi non plus :non: j´ai beaucoup de mal en ce moment a comprendre le PS, entre Ségogo et Hollande le mollasson, j´ai beaucoup de mal :non:

trunks_the_boss
trunks_the_boss
Niveau 9
10 février 2007 à 12:18:07

:-d GRAZIE MILLE :-d

jks5
jks5
Niveau 4
10 février 2007 à 12:45:54

salut, je voudrais aider ceux qui ont du mal avec les pointeurs, lisez les commentaires du code source :) :
http://rafb.net/p/6hHlKH83.html

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment