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...
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...
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 ;)
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.
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...
ah... ca me rappelle quand je mettais du preprocesseur C dans mon code java... ![]()
on a tous des moment de fatigue...
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.
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 ^^"
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
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
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
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/
Okidoki ![]()
Merci beaucoup ^^
godrik@skynet-ubuntu:test$ echo $PS1
${debian_chroot:+($debian_chroot)}\u@\h:\W\$
pour plus d´info, lire man bash a propos du prompt)
ok merci, ça marche nickel (j´avais mis un w minuscule)
bonjour!
j´ai 3 problemes
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,
.
PS: et SVP, aider vous meme car les sites c´est embetant.
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
"je n´ai pas bien compris le PS"
--> Moi non plus
j´ai beaucoup de mal en ce moment a comprendre le PS, entre Ségogo et Hollande le mollasson, j´ai beaucoup de mal ![]()
GRAZIE MILLE ![]()
salut, je voudrais aider ceux qui ont du mal avec les pointeurs, lisez les commentaires du code source
:
http://rafb.net/p/6hHlKH83.html