Salut tout le monde! Alors voilà je viens de passer de Dev-C++ à Visual C++ 6.0, et la ligne
string nom[2][30];
génère trois erreurs:
c:\documents and settings\morpheus\bureau\programmation\morpheus project\header1.hpp(9) : error C2146: syntax error : missing ´;´ before identifier ´nom´
c:\documents and settings\morpheus\bureau\programmation\morpheus project\header1.hpp(9) : error C2501: ´string´ : missing storage-class or type specifiers
c:\documents and settings\morpheus\bureau\programmation\morpheus project\header1.hpp(9) : fatal error C1004: unexpected end of file found
Voilà et aussi conio.h ne marche pas du tout, je ne trouve pas le fichier conio.o que je croyais devoir ajouter au projet pour que ça marche, enfin bref ça ne va pas du tout!!!
SVP aidez moi!!
Je vous remercie,
Morpheus
Bin c´est normal d´avoir des erreurs puisque le type " string" n´existe pas en C ! !
dans ton cas c´est plutôt " char" qu´il faut utiliser . ..
Il existe bien un type string dans la STL mais il te faut pour ca faire quelques trucs avant de l´utiliser :
. ..
std::string nom[2];
ou alors une autre facon ( mais à éviter car beaucoup de problèmes en perspective) :
using namespace std;
. ..
string nom[2];
ok merci jvé essayer tt ça ![]()
alors.... mon pb avec string est résolu ( merci altonfrere) mais maintenant g tjrs mes erreurs avec conio.h et g des nouvells erreurs avec > > et < < . .. et ça m´énerve jme demande si je v pa retourner sous dev c++
Faut pas se décourager aussi vite ! sinon tu iras pas bien loin en programmation . ..
Encore une fois il faut faire un include pour conio.h ( je pense). Le fait d´ajouter des fichiers . h au projet ne fait ABSOLUMENT RIEN DU TOUT ! Ca te permet juste de mieux gérer tes fichiers sources ( tu peux y accéder directement depuis l´éditeur). Par contre les . cpp ou . c présents dans le projet seront compilés.
Les headers doivent à un moment donné être inclus ( sinon ils servent à rien).
lol oui je sais pour les include
je m´étais mal exprimé...
bon, là je n´ai plus que trois erreurs, les voici:
c:\documents and settings\morpheus\bureau\programmation\morpheus project\header1.hpp(9) : error C2146: syntax error : missing ´;´ before identifier ´nom´
c:\documents and settings\morpheus\bureau\programmation\morpheus project\header1.hpp(9) : error C2501: ´string´ : missing storage-class or type specifiers
c:\documents and settings\morpheus\bureau\programmation\morpheus project\header1.hpp(9) : fatal error C1004: unexpected end of file found
avec l´expression:
string nom[2][30];
voilà j´espère que vous trouverez la solution à ce pb, paske moi là g tt essayé ( sauf lza bonne solution évidemment
)
Renseigne toi sur le débugueur ça peut aider...
Moi je sais. Ce débuggueur est une vieille version. En effet, le type string n´existait pas en C++ il y a quelques années. Il fallait donc passer par les pointeurs. Et certainement que vc++ est trop vieille pour intégrer ce nouveau type. Il vaut mieux prendre un compilateur comme celui de Borland C++ que je trouve mieux en terme de detection des erreurs.
bah oui mais je fais comment alors? il y a pas une méthode? une ligne à rajouter par ci par là ou un fichier à inclure? et pour mes trucs de conio? pas d´autre moyen non plus??? ça fait 2 semaines que j´attends VC++ et là que je l´ai il fo ke je retombe sur borland... ![]()
Ah mon pauvre Mathieun7. Tu découvres que Microsoft n´en fait qu´à sa tête. Y´a un autre moyen pour gérer les chaînes, c´est d´utliser les pointeurs. Le pb c´est que cette notion est difficile à saisir. Moi même j´ai du mal là dessus. En compilant le code ci dessous ca marchera :
int main ( )
{
char * nom[2][30];
return 0;
}
Concernant conio.h c´est quoi le pb ? Car j´ai pas saisi là. ![]()
pour conio.h, les fonction textcolor, textbackground, gotoxy ne sont mm pas déclarée.... encore moins window, une fonction qui me servirait bien, mais pr window j´avais déjà des problèmes avec dev c++... enfin ma priorité c´est de régler le pb string
et les pointeurs enfin ta méthode, tu pourrais m´expliquer?
Il y a un truc qui m´inquiète dans tes erreurs c´est qu´elles portent sur un fichier . hpp ? ! Un header ne doit JAMAIS contenir une déclaration de variable, ceci dit il te faut obligatoirement inclure < string> avant toute référence au type std::string ! ( apparement tu as utilisé using namespace puisque tu continues à écrire " string nom[2][30] . ...), et je t´ai dis que ca pourrait poser bcp de pbs...
enfin sans plus d´infos sur ton code on pourra pas bcp t´aider ( si tu pouvais nous montrer le contenu de ton fichier header1.hpp)
lol bon ok je vous montre mes sources! mais attendez, je me demande juste comment je peux demander son nom à l´utilisateur et entrer ce mon ou cette chaine de caracères dans un tblo? char ou string peu m´importe...
je connais un peu strcpy() mais je ne sais comment récupérer l´entrée de l´utilisateur!
Bin déjà 1ere lecon :
- on écrit un programm C dans un fichier dont le nom se termine par ´c´, exemple : programme.c
- on écrit un programm C++ dans un fichier dont le nom se termine par ´cpp´, exemple : programme.cpp
- on écrit les headers dans des fichiers dont le nom se termine par ´h´ : header.h
( pour le C++ on rencontre parfois l´extension hpp mais c´est rare, c´est plutôt sous unix)
Quand tu auras assimilé ca on passera à la 2e ![]()
merci mais je sais tout ça!
bon voici mon code:
Header1.hpp:
string nom[2][30];
string equipeUN[3];
string equipeDEUX[3];
int i;
/ /CLASSE PERSO, DEFINITION
class perso //classe qui définit un personnage de base
{
public:
perso(int PtsDef, int PtsAttak, int PtsMagie);//constructeur
~perso();//destructeur
int PV; / /nbr de pv du guerrier
int PA; / /nbr de points d´attaque
int PM; / /points de magie
int PD; / /points de défense
/ /Fonctions membres de la classe perso
void attaque(perso *ennemi);
};
perso::perso(int PtsAttak, int PtsDef, int PtsMagie)
{
PV = 100;
PD = PtsDef;
PA = PtsAttak;
PM = PtsMagie;
}
perso::~perso()
{
}
void perso::attaque(perso *ennemi)
{
int dommages = ( PA - ennemi->PD)*2;
if ( dommages > 0)
{
ennemi -> PV -= dommages;
}
else
{
cout < < " Il rate son attaque!";
}
}
/ /FIN DE CLASSE PERSO
/ /INTRODUCTION + NOMS
void intro()
{
textbackground(0); / / couleur de fond : noir
textcolor(14); / /couleur de texte jaune
gotoxy(1,1);
cout < < " \t\tBienvenue dans The Morpheus´ Project!\n\n\n\n";
textcolor(15);
cout < < " \tC´est un jeu dans lequel vous pourrez trouver des :\n" < < endl;
cout < < " \t\tþMages," < < endl;
cout < < " \t\tþPrêtres," < < endl;
cout < < " \t\tþGuerriers Ultimes..." < < endl;
cout < < " \n\tToutes ces unités sont prêtes à rejoindre vos rangs." < < endl;
cout < < " \n\t\t\tQue la bataille soit!\n\n\n";
/ /DEFINITION DES PRENOMS
cout < < " Comment vous nomme-t-on?" < < endl;
cin > > nom[0];
cout < < " Merci. Qui allez vous devoir affronter?" < < endl;
cin > > nom[1];
cout < < " \n\tTrès bien, " < < nom[0] < < " , vous allez maintenant choisir vos unités." < < endl;
Sleep(1700);
}
/ /FIN DE L´INTRODUCTION
/ /Configuration des équipes
void confEquipes()
{
int numchoix = -1, choix, ptsUnits = 6, ptsUnitsEnleves = 0;
reprise:
while(ptsUnits > = 2)
{
system("cls");
textcolor(14);
cout < < " \t\t\tCONFIGURATION DES EQUIPES" < < endl;
textcolor(15);
cout < < endl;
cout < < " Choisissez entre ces quatre unités les unités qui rejoindront vos rangs" < < endl;
cout < < endl;
cout < < " 1 þ Un Guerrier" < < endl;
cout < < " Une unité \"de base\" qui ne possède pas de magie, elle ne coûte que 2 points" < < endl;
cout < < " d´unités." < < endl;
cout < < endl;
cout < < " 2 þ Un Prêtre" < < endl;
cout < < " Une unité qui soigne les unités alliées, elle peut aussi voler des points" < < endl;
cout < < " de Vie aux unités ennemies visées. Il coûte 2 points d´unités." < < endl;
cout < < endl;
cout < < " 3 þ Un Mage" < < endl;
cout < < " Une unité plus évoluée que le prêtre, dotée de pouvoirs magiques, elle ne peut" < < endl;
cout < < " attaquer physiquement mais elle possède un sort qui enlève des points de vie à" < < endl;
cout < < " l´unité ennemie visée. Il coûte 3 points d´unités." < < endl;
cout < < endl;
cout < < " 4 þ Un Guerrier Ultime" < < endl;
cout < < " L´unité la plus évoluée du jeu, elle coûte 4 points d´unités, et possède la" < < endl;
cout < < " capacité d´attaquer, elle connaît également la Magie..." < < endl;
cout < < endl;
cout < < " Votre choix: " < < endl;
cout < <
"_________________________________________________
______________________________" < < endl;
cout < < " Points d´unités: " < < ptsUnits;
gotoxy(13,22);
cin > > choix;
switch(choix)
{
case 1: if(ptsUnits > =2)
{
ptsUnitsEnleves = 2;
++numchoix;
equipeDEUX[numchoix] = " Guerrier";
}
else
{
goto reprise;
}
break;
case 2: if(ptsUnits > =2)
{
ptsUnitsEnleves = 2;
++numchoix;
equipeDEUX[numchoix] = " Prêtre";
}
else
{
goto reprise;
}
break;
case 3: if(ptsUnits > =3)
{
ptsUnitsEnleves = 3;
++numchoix;
equipeDEUX[numchoix] = " Mage";
}
else
{
goto reprise;
}
break;
case 4: if(ptsUnits > =4)
{
ptsUnitsEnleves = 4;
++numchoix;
equipeDEUX[numchoix] = " Guerrier Ultime";
}
else
{
goto reprise;
}
break;
}
gotoxy(1,23);
cout < <
"_________________________________________________
______________________________" < < endl;
cout < < " Points d´unités: " < < ptsUnits;
Sleep(300);
cout < < " - " ;
Sleep(300);
cout < < ptsUnitsEnleves;
Sleep(300);
cout < < " = " ;
Sleep(300);
ptsUnits -= ptsUnitsEnleves;
cout < < ptsUnits;
Sleep(700);
system("cls");
cout < < " \n\n\n\n";
cout < < " \t\t . o888P Y8o8Y Y888o." < < endl;
cout < < " \t\t d88888 88888 88888b" < < endl;
cout < < " \t\t d888888b_ _d88888b_ _d888888b" < < endl;
cout < < " \t\t 8888888888888888888888888888888" < < endl;
cout < < " \t\t 8888888888888888888888888888888" < < endl;
cout < < " \t\t YJGS8P\"Y888P\"Y888P\"Y888P\"Y8888P" < < endl;
cout < < " \t\t Y888 ´8´ Y8P ´8´ 888Y" < < endl;
cout < < " \t\t ´8o V o8´" < < endl;
cout < < " \t\t ` `" < < endl;
cout < < " \nUn " < < equipeDEUX[numchoix] < < " se rallie à votre cause.\n\n\n\n\n\n\n\n";
Sleep(1900);
}
}
main.cpp:
int main()
{
intro();
confEquipes();
/ /transfert de equipeUN à equipeDEUX
for(i=-1; i<3; i++)
equipeUN[i] = equipeDEUX[i];
/ /fin du transfert
system("cls");
cout < < " \n\n\n\n\n\t" < < nom[1] < < " , c´est maintenant à vous de choisir vos unités." < < endl;
Sleep(1000);
confEquipes();
getchar();
getchar();
return 0;
}
Voilà
merci mais je sais tout ça!
ok, voyons la suite....
Header1.hpp:
bin retour à la case départ ! et d´une, tu appelles ton fichier header ( ca veut tout dire...) et de 2 tu mets l´extension hpp ! !!!! bref . ..
bon j´y peux rien si tu lis pas ce qu´on te dit . .. je t´ai donc dis au début que tu devais écrire std::string pour déclarer une chaine !
donc écris :
std::string nom[2];
std::string equipeUN[3];
std::string equipeDEUX[3];
la 2e dimension ( 30) pour la variable nom ne sert plus dans ce cas . ..
ensuite ya beaucoup de trucs à corriger qui serait trop long à expliquer ici !
je crois que le mieux c´est de passer par des char pour toi ( vu que utilises cin & Cie)...
char nom[2][30];
char equipeUN[3][30];
char equipeDEUX[3][30];
et utiliser strcpy pour copier une chaine dans une autre . ..
pour finir les fonctions textbackground, gotoxy & Cie je sais pas où tu as trouver ca mais elles n´existent pas, c´était peut etre ca ta question au sujet de conio.n ? je crois que c´est pas du tout le même qu´avec DevC++ en fait.
hpp c un header
oui merci je sais lire
Mais ca ca s´appelle des déclarations de variables!! :
string nom[2][30];
string equipeUN[3];
string equipeDEUX[3];
int i;
ca n´a rien à faire dans un header !
ah ok
mais ça change rien?
dsl si je ss désagréable chui fatigué
Dans ton exemple non c pas " trop" grave. Mais c´est une habitude à prendre si tu veux pas avoir de mauvaises surprises pour plus tard...
Par définition un header sert à déclarer tout un tas de chose ( des types, des classes, des prototypes de fonctions) mais en aucun cas il ne faut déclarer ( allouer) de variable dedans. Plusieurs fichiers souces CPP peuvent si besoin inclure chacun de leur côté un header et si jamais des variables sont déclarées l´intérieur tu vas te retrouver avec des erreurs de linkage qui te diront que tu as plusieurs définitions de variables etc...
Donc essaie de prendre de bonnes habitudes dés le départ, et structure un peu mieux ton code
Ouais dsl moi aussi suis un peu fatigué et pas très patient... d´ailleurs je vais me coucher
bon courage ![]()