On bosse sous linux en cours ? ![]()
Et oui, les profs te font bosser sous Linux.
Et apres, quand t´arrives a des entretiens d´embauche :
systeme :
- visual C++
et vous ?
- visual C++
et vous ?
- visual C++
Ah ! Bon...
Si, pour les programmeurs réseau, Linux ça se fait bien, mais dans énormément d´autres domaines... arf !
De toute façon, soyez rassurés : sous Wnidows ou Linux, le C reste du C.
Des fois, y´a des chtites variantes, mais pas énorme...
Pareil à l´université où je suis allé un an : que du Linux.
Salut, moi j´ai commencé à faire un casse-brique avec la SDL( j´utilise dev-c++ 4.9.7.0).Alors, j´ai commencé à faire une classe SDL_brique qui hérite de SDL_Rect(ce qui fonctinne), je l´ai mis dans ma source main en incluant edit_level qui sera mon module pour placer les brique à chaque lvl. Le code(pour l´instant) de edit_level est:
void edit_lvl1(SDL_brique* briq)
{
}
Comment fais-t-on pour que SDL_brique soit accessible dans edit_level
PS:J´ai les erreur suivante:
3 C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\main.cpp
In file included from main.cpp
2 C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\edit_level.cpp
`SDL_brique´ was not declared in this scope
2 C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\edit_level.cpp
`briq´ was not declared in this scope
3 C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\edit_level.cpp
variable or field `edit_lvl1´ declared void
3 C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\edit_level.cpp
syntax error before `{´
C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\Makefile.win
[Build Error] [main.o] Error 1
SDL_Brique c´est une structure que tu as créée ? Si oui alors tu inclue le fichier de son prototype je pense ( dans le cas où tu as bien foutu un proto hors de ton main...)
Les autres erreurs partiront d´elle-même je pense...Je sais pas vraiment comment tu as inclus, apparemment t´as pas de headers...?
bon, alors avec qu´est ce que tu m´as dit,j´ai changer des chose, j´ ai mis SDL_brique(c´est une class) dans un module brique que j´ai inclus à main.cpp et edit_level.cpp(je ne suis pas habitué au séparation de projet et n´y au prototype de class, mais je veux m´y habitué), où dois-je mettre les prototypes de ma classe, dois-je inclure brique dans le 2 autre modules?
Maintenant, mon début de main est:
Le début de edit_level est:
class SDL_brique;
void edit_lvl1(SDL_brique* briq)
{
}
et le code complet de brique est:
class SDL_brique : public SDL_Rect / /brique
{
public:
SDL_brique()
{
h=20;
w=50;
}
~SDL_brique(){}
Uint32 c;
};
![]()
un petit prob d´opperation logique
int main(int argc, char* argv[])
{
int a,b;
cin > > a;
cin > > b;
if ( ~((a<5)||(b<90)))
{
cout < < " ok \n";
}
system("pause");
return 0;
}
Le programme retourne toujours ok alors que ( si j´avais bien programmé) ca n´aurait du etre le cas que pour a<5 ou b<90 faux.
POurquoi ca marche pas?
Non,non tu as bien programmé.
~((a<5)||(b<90))
C´est comme :
! ((a<5)||(b<90))
? ??
Si oui, alors d´après l´agèbre de Boole c´est équivalent à :
! (a<5) && ! (b<90)
Soit :
( a>=8)&&(b>=90)
Or toi tu veux pas un ET mais un OU :
( a>=8)||(b>=90)
->
! (a<8) || ! (b<90)
->
! ((a<8)&&(b<90))
Voilà ![]()
Remplace mes 8 par des 5 évidemment ![]()
non, remplace juste le ~ par un !
je ne sais pas trop comment il marche, mais le ~ est un NON bit à bit et non pas un NON logique, alors peut-être qu´il prend l´expression de droite qui est un bool et qu´il l´a convertit en int avant de faire le ~ moralité que le bool soit true ( 0x00000001) ou false ( 0x00...), avec le ~ tu auras toujours plein de 1 et juste un zéro à la fin peut-être.
je viens de vérifier, c´est bien ça qu´il fait.
donc utilise ! et non pas ~
merci
mon message est rendu un peu loin, je vais réexpliquer un peu( je veux apprendre à créer des module). Je commence à faire un casse-brique en c++ avec une class SDL_brique qui hérite de SDL_Rect, ca marche dans main mais ça ne marche pas quand je la met dans un autre module . cpp(je ne suis pas habitué de séparé les projet). Quand je la met dans un autre module,voici ca marche pas. Voici les deux code:
Celui de main:
int main(int argc, char** argv)
{
if(SDL_Init(SDL_INIT_VIDEO) ==-1) / /initialise la sdl
{
printf("%s" , SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
SDL_Surface* screen;
screen = SDL_SetVideoMode(800,600, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); / / mode graphique
if(screen==NULL)
{
printf("Can´t set screen %d", SDL_GetError());
}
SDL_Event event; / / gestion clavier
bool done=true;
SDL_Rect raq; / / création de la raquette
raq.x =350;
raq.y=570;
raq.h=10;
raq.w=100;
SDL_brique briq[50]; / /création de 50 brique
Uint32 rouge=SDL_MapRGB(screen->format, 222, 13, 7);
Uint32 vert=SDL_MapRGB(screen->format, 38, 160, 0);
Uint32 jaune=SDL_MapRGB(screen->format, 255, 255, 0);
while(done==true) / / boucle principale
{
SDL_PollEvent(&); / / gestion du clavier
if ( event.type ==SDL_KEYDOWN)
{
switch(event.key.keysym.sym)
{
case ( SDLK_LEFT): / /touche gauche pour aller à gauche
if(raq.x > 10)
raq.x -= 5;
break;
case ( SDLK_RIGHT): / /touche gauche pour aller à droite
if(raq.x < 690)
raq.x += 5;
break;
case ( SDLK_ESCAPE): / / escape pour quitté
done = false;
break;
}
}
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 45, 150, 250));
SDL_FillRect(screen, &, SDL_MapRGB(screen->format, 28, 128, 128));
SDL_FillRect(screen, &[0], jaune);
SDL_Flip(screen);
}
return 0;
}
Celui de class est:
class SDL_Rect;
class SDL_brique : public SDL_Rect / /brique
{
public:
SDL_brique()
{
h=20;
w=50;
}
~SDL_brique(){}
Uint32 c;
};
comment fais-t´on pour que ça marche et aussi comment utiliser la classe dans un autre module, j´ai les erreurs suivantes :
3 C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\class.cpp
base class `SDL_Rect´ has incomplete type
11 C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\class.cpp
syntax error before `;´
C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\class.cpp
In method `SDL_brique::SDL_brique()´:
7 C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\class.cpp
`h´ undeclared ( first use this function)
( Each undeclared identifier is reported only once
for each function it appears in.)
8 C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\class.cpp
`w´ undeclared ( first use this function)
C:\Documents and Settings\Leon P\Bureau\tuto\casse-brique(en développement)\Makefile.win
[Build Error] [class.o] Error 1
c´est pas possible. c´est #include " class.h" que tu dois avoir créé ne contenant que les proto et les structures de données.
notons que dans l´absolu, les include de . cpp ça marche relativement bien, en sachant un minimum ce qu´on fait ; pour ceux qui n´aiment pas foutre leur code inline ou les implémentations de templates dans les . h par exemple...
Dans ton class.cpp, il ya plusieurs problèmes :
Tu n´as pas inclus SDL.h, donc il ne connait pas le type SDL_Rect...
Ton " class SDL_Rect;" ça ne fait pas un type mais une classe vide à la place...Donc pour l´héritage c´est foutu
je suis tout à fait d´accord avec toi LGV et comme tu dis " en sachant un minimum ce qu´on fait" ce qui n´est pas le cas quand on commence ![]()
Merci pour toute vos réponse, finalement, j´ai pour la première fois fais de header et ça marche comme ça.
Slt, moi c´est juste pour ajouté une chose à un prog c++ : lire un fichier ini avec seulement 2 valeurs... Si quelqu´un peut me le faire je lui en serait reconnaissant ( j´ai les sources).