Salut, j´ai une petite question, plus particulièrement à toi Fvirtman : dans tes cours C++, annexe I.2: "L´accès en C++ (iostream)", et bien voilà c´est tout bête mais il ne reconnait ofstream, j´inclue pourtant bien fstream mais ça ne marche pas... Je suis en train de passer du C au C++ donc peut-être qu´il y a des modifications à faire au niveau IDE ? ... Voilà merci !
tu fais bien
std::ofstream
?
"#include <iostream>
using namespace std;
....
ofstream fichier_erreurs("fichier_erreurs.txt", ios::app);
fichier_erreur << "Erreur blabla..." << endl;
exit(EXIT_FAILLURE);"
Comme ici :
http://perso.numericable.fr/~fvirtman/info/tuto/I_2_01_ofstream.cpp
quel est le message d´erreur que tu obtiens ?
Euh sur le code au dessus j´ai fais une petite erreur sur le FAILURE, sinon j´ai l´erreur : "ofstream undeclared", "excepted ´;´ before ´fichier_erreurs´", "fichier_erreur undeclared" et même "endl undeclared" :s !
atta, tu ne donnes pas le meme code des deux coté.
ofstream fichier_erreurs("fichier_erreurs.txt", ios::app);
fichier_erreur << "Erreur blabla..." << endl;
De plus, en premiere ligne tu as mis fichier_erreurS donc c´est normal que ca ne marche pas.
Bizarre, normalement "fstream" et "iostream" sont reconnus sous tous les compilos.
Essaie de reduire le programme a seulement ça :
using namespace std;
int main()
{
ofstream O("c:/test.txt");
O.close();
return 0;
}
regarde si ça se lance.
Ah, ça, ça marche, je dois avoir un prob dans mon code alors :
/* Includes */
int main(int argc, char *argv[])
{
/* Booléens */
bool touchesAppuyees[NOMBRE_TOUCHES] = {false};
bool jeuEnCours = true;
/* Variables SDL */
SDL_Surface *ecran = NULL;
/* Chargement de la SDL et gestion de l´erreur */
if (SDL_Init(SDL_INIT_VIDEO) == -1) // Mode vi
déo
{
ofstream fichier_erreurs("fichier_erreurs.txt", ios::app);
fichier_erreurs << "Impossible de charger la SDL : " << SDL_GetError();
exit(EXIT_FAILURE); // Quitte le programme
}
/* Chargement de SDL_ttf et gestion de l´erreur */
if (TTF_Init() == -1)
{
exit(EXIT_FAILURE);
}
ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE);
if (ecran == NULL) // En cas d´erreur
{
exit(EXIT_FAILURE);
}
/* Boucle principale */
while (jeuEnCours)
{
gestionClavier(touchesAppuyees);
if (touchesAppuyees[QUITTER])
jeuEnCours = false;
}
/* Libération de la mémoire */
SDL_Quit();
TTF_Quit();
return EXIT_SUCCESS;
}
Désolé j´ai posté pas mal de truc qui ne servent pas dans mon problème mais bon. Au cas où...
Bonsoir!
Dans la librairie SDL, une fonction permet d´y inserer le nombre d´argument que l´on veux :
SDL_SetVideoMode(1024, 768, 32,
SDL_DOUBLEBUF|SDL_SWSURFACE|SDL_FULLSCREEN|...|...
);
J´aimerai moi aussi faire une fonction a nombre d´arguments non definies.
C´est difficile a faire?
Vous auriez pas un petit exemple simple d´utilisation?
Merci ![]()
TNToon > étrange, ton code a l´air pourtant bon.
Si celui que je t´ai proposé plus haut marche, essaie progressivement de désactiver quelques trucs, épure, et surtout, vérifie la casse.
ElHuron > cette technique d´utilisation (avec des |, n´est en aucun cas des parametres variables
c´est une gestion de flags, tout simplement, fait par une astuce sympa, que je vais expliquer plus bas.
Pour de vrais arguments variables, regarde mon tuto §G.17 (stdarg)
Pour le truc de SDL, voici un exemple :
Comme tu vois, ces nombres sont uniquement des puissances de 2.
Si tu les mets en binaire, ça fait :
1
10
100
1000
10000
...
Si tu fais un | logique dessus, ça cumulera
par exemple :
10 | 1000 = 1010 -> tu as ainsi 2 flags d´activés.
Entete de fonction :
int fonction(int flags)
Pour relire ça dans ta fonction, tu fais simplement :
if (flags&PARAM1)
{
// code a faire si le param 1 est activé.
}
Sympa cette astuce ! Mais je comprends pas la ligne du if : if (flags&PARAM1) ?
Ok, bien pensee cette astuce ![]()
Merci FVirtman!
Je suis en train de me fabriquer plusieur classes, Image, Texte, Touche.
Touche touche;
Image ours(..., ..., ...);
if(touche.pressee(HAUT|GAUCHE))
ours.deplacer(-5, -5);
Jvais essayer d´appliquer cette methode.
Ah j´ai compris pour &PARAM1 en lisant ton tutos sur les bits. Désolé pour les multi posts ^^
Bonsoir
J´utilise la gestion de la majuscule a l´aide de la SDL. Pour cela, si la touche SHIFT gauche est enfoncée, la lettre enfoncé sera en consequent en majuscule.
Mais cette touche SHIFT gauche, je n´arrive pas a la trouver, ou bien alors elle ne fonctionne pas.
Je crois que c´est : SDLK_LSHIFT.
PS : Le probleme vient du nom de la touche, car en indiquant SDLK_UP a la place du shift, ca fonctionne correctement.
Sinon, encore une deuxieme question :
J´ai une chaine :
char *chaine = "salut";
La chaine est constituée de :
s
a
l
u
t
\0
Je voudrais savoir, si je met a la place du t un \0, la derniere s´annule :
s
a
l
u
\0
Ou bien alors, elle reste, comme cice :
s
a
l
u
\0
\0
Merci ![]()
ta chaine sera de forme :
s
a
l
u
\0
\0
mais quand tu l´affichera, ca mettra : salu, car la lecture des tableaux de caractére s´arrete au caractére \0.
Pour la SDL, je peux pas trop t´aider, j´avais fait une fonction pour afficher du texte à l´ecran aussi mais j´avais jamais testé les majuscules ![]()
Merci beaucoup pour cette information KeepSmile
Pour la SDL, il me manque le nom de la touche ShiftGauche ainsi que Effacer.
J´ai beau fouiller dans les fichiers de SDL (keysym.h), je trouve pas mon bonheur.
J´ai meme noté chaque touche enfoncée, j´ai obtenu tantot des nombres enormes (-75606, 65600...) que des nombres corrects 97, 122 (a, z).
Mais j´ai pas reussi a recuperer les bons
Apres avoir quitter le programme, les icones de mes fichiers textes se sont transformés en icone de projet pour code Blocks.
ElHuron, le comportement que tu obtiens est normal. Il est probablement que les bits de poids fort soit utilisé pour les touche spéciales.
Parcontre, n´utilise pas directement le code que tu recois par SDL car il est susceptible de changer dans de futur version. La ´norme´ SDL garanti que la touche A sera toujours SDL_A (ou je sais pas quoi) mais ne garanti pas que ca sera toujours le chiffre 64 (ou je sais pas quoi).
C´est exact, je vais donc apporter une petite modification, j´avait pas pensé a ca.
Merci pour cette info.
Je fais parcourir ma boucle de 97 a 122 pour les lettres, je vais aller de SDLK_a a SDLK_a+26.
Mais sinon, j´affiche le nombre pour retrouver sa constante dans le fichier keysym.h.
Si quelqu´un connait le nom des deux touches que je recherche, merci de me le signaler ![]()
Pour l´instant, j´ai mit la fleche du haut pour la majuscule (rester enfoncé) et la fleche gauche pour effacer.
Mais le problemes de ces lettres, c´est qu´elles ne sont pas innees, on est pas habituer a les utiliser de cette maniere.
ElHuron >
voici un petit code a compiler en mode console (il faut que tu aies la console derriere) :
http://rafb.net/p/uYFTaA77.html
ça te donnera le code de toutes les touches sur lesquelles tu appuieras, en décimal, et hexadécimal.
Pour retrouver la constante dans keysm, recherche le nombre hexa dedans ![]()