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

La classe string ne passe pas sous VC++

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 19:54:30

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

Altonfrere
Altonfrere
Niveau 10
21 janvier 2004 à 20:15:22

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 :

  1. include < string>

. ..
std::string nom[2];

ou alors une autre facon ( mais à éviter car beaucoup de problèmes en perspective) :

  1. include < string>

using namespace std;

. ..
string nom[2];

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 20:19:31

ok merci jvé essayer tt ça :)

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 20:31:44

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++

Altonfrere
Altonfrere
Niveau 10
21 janvier 2004 à 21:25:52

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).

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 21:39:41

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 :) )

DasHuhn
DasHuhn
Niveau 10
21 janvier 2004 à 21:54:50

Renseigne toi sur le débugueur ça peut aider...

Kilyn_
Kilyn_
Niveau 10
21 janvier 2004 à 22:12:36

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.

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 22:23:45

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... :(

Kilyn_
Kilyn_
Niveau 10
21 janvier 2004 à 22:27:49

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 :

  1. include < iostream.h>

int main ( )
{
char * nom[2][30];
return 0;
}

Concernant conio.h c´est quoi le pb ? Car j´ai pas saisi là. :(

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 22:36:14

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?

Altonfrere
Altonfrere
Niveau 10
21 janvier 2004 à 22:41:05

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)

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 22:46:39

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!

Altonfrere
Altonfrere
Niveau 10
21 janvier 2004 à 22:53:28

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 :)

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 22:56:14

merci mais je sais tout ça!
bon voici mon code:
Header1.hpp:

  1. include < iostream.h>
  2. include < stdlib.h>
  3. include < stdio.h>
  4. include < string>
  5. include < conio.h>
  6. include < windows.h>

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:

  1. include " header1.hpp"

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à

Altonfrere
Altonfrere
Niveau 10
21 janvier 2004 à 23:19:51

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.

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 23:40:30

hpp c un header

Altonfrere
Altonfrere
Niveau 10
21 janvier 2004 à 23:43:09

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 !

MathieuN7
MathieuN7
Niveau 10
21 janvier 2004 à 23:47:49

ah ok
mais ça change rien?
dsl si je ss désagréable chui fatigué

Altonfrere
Altonfrere
Niveau 10
21 janvier 2004 à 23:52:05

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 :)

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