bonjour je travail sur un projet de RPG avec mon cousin et je souhaiterai avoir de l'aide car en voulant tester mon code le compilateur m'a "vomis" un bon gros paquet d'erreus :
classe.hpp:23:11: error: expected unqualified-id before ‘[’ token string[] classes = {"Archer", "Guerrier", "Mage"}; ^ main.cpp: In function ‘int main()’: main.cpp:6:17: error: conversion from ‘character*’ to non-scalar type ‘character’ requested character c1 = new character() ^~~~~~~~~~~~~~~ In file included from character.hpp:10, from character.cpp:8: classe.hpp:23:11: error: expected unqualified-id before ‘[’ token string[] classes = {"Archer", "Guerrier", "Mage"}; ^ character.cpp:12:11: error: expected unqualified-id before ‘)’ token character() { ^ In file included from classe.cpp:8: classe.hpp:23:11: error: expected unqualified-id before ‘[’ token string[] classes = {"Archer", "Guerrier", "Mage"}; ^ classe.cpp: In constructor ‘classe::classe()’: classe.cpp:24:29: error: ‘class classe’ has no member named ‘classes’; did you mean ‘classe’? this->className = this->classes[classN]; ^~~~~~~ classe classe.cpp: At global scope: classe.cpp:44:28: error: ISO C++ forbids declaration of ‘afficherPersonnage’ with no type [-fpermissive] classe::afficherPersonnage() { ^ classe.cpp:44:1: error: no declaration matches ‘int classe::afficherPersonnage()’ classe::afficherPersonnage() { ^~~~~~
j'utilise cette commande de compilation : g++ -o main main.cpp character.cpp classe.cpp et voila le contenu de mais fichiers :
main.cpp
#include <iostream>
#include "character.hpp"
using namespace std;
int main() {
character c1 = new character()
return 0;
}
character.hpp :
/*_______________________________________________*
|| ||
|| [FILENAME] ||
|| Created by ||
|| Strong21 ||
|| ||
*_______________________________________________*/
#ifndef CHARACTER_HPP
#define CHARACTER_HPP
#include "classe.hpp"
#include <iostream>
using namespace std;
class character
{
public:
character();
private:
classe c;
};
#endif // CHARACTER_HPP
character.cpp :
/*_______________________________________________*
|| ||
|| [FILENAME] ||
|| Created by ||
|| Strong21 ||
|| ||
*_______________________________________________*/
#include "character.hpp"
#include <iostream>
using namespace std;
character() {
this->c = new classe();
}
Le using namespace n'a pas sa place dans les fichiers .hpp, il faut toujours spécifier le namespace dans ces derniers.
Il faudra donc rajouter std:: devant tous les éléments utilisant ce namespace
Et puis, je te soupçonne d'avoir fait du Java auparavant
character c1 = new character(); // Faux : renvoie un pointeur
character c1; // Bonne déclaration
/* Pour passer des arguments au constructeur : */
character c1(arg0, arg1);
le mot-clé new renvoie un pointeur, attention
- Edité par 23antoine03 28 mai 2020 à 12:52:55
Vous ne pouvez pas comprendre la récursivité sans d’abord avoir compris la récursivité
Et si tu commençait par indiquer la taille de tes tableaux ?
Et, surtout, si tu commençais déjà par utiliser les classes qui sont prévues pour pour les tableaux:
std::array, si tu sais, au moment d'écrire le code, le nombre d'éléments que le tableau doit contenir, et qu'il ne changera plus
std::vector, si le nombre d'éléments qu'il doit contenir peut varier au fur et à mesure de l'exécution du programme
Tu verras, ca change la vie
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
mais, un tableau en C++ depuis 2011 c'est plutôt std::array<> :
using namespace std::literals;
auto classes = std::array{ "Archer"s, "Guerrier"s, "Mage"s }; // nécessite C++17
auto classes = std::array<std::string,3>{"Archer", "Guerrier", "Mage"}; // notation à partir du C++11
Salut ! La meilleure idée serait simplement d'apprendre le C++, et de la programmation en général... Parce que le Java++ n'existe pas encore (quoi que le C# existe !). On n'improvise pas la programmation d'un RPG en C++ sans connaître le base de la base et en appelant une classe "classe"...
Il n'y a rien de réducteur dans le fait de commencer par un snake, une liste chainée ou le jeu du pendu, on est tous passés par là. Bref... perso j'ai pas appris à faire du vélo et dévalant les montagnes des compétitions redbull, j'ai pas appris la MMA en m'inscrivant à l'UFC, après c'est ma vision des choses, tu peux très bien évoluer dans le langage de cette façon... mais tu commenceras la notion de pointeur, dans 10 ans, quand tu auras compris qu'un tableau en C++ c'est pas un tableau en C#/Java.
bonjour je n'ais jamais fait de java et j'ai toujours écrits mes header c++ de la même façon (qui fonctionnais très bien) c'est pour cela que je demande une aide donc je ne connais pas la syntaxe java et apprès modification cette erreur arrive :
character.cpp: In constructor ‘character::character()’: character.cpp:13:26: error: no match for ‘operator=’ (operand types are ‘classe’ and ‘classe*’) this->c = new classe(); ^ In file included from character.hpp:10, from character.cpp:8: classe.hpp:17:7: note: candidate: ‘classe& classe::operator=(const classe&)’ <deleted> class classe ^~~~~~ classe.hpp:17:7: note: no known conversion for argument 1 from ‘classe*’ to ‘const classe&’ classe.hpp:17:7: note: candidate: ‘classe& classe::operator=(classe&&)’ <deleted> classe.hpp:17:7: note: no known conversion for argument 1 from ‘classe*’ to ‘classe&&’
main.cpp :
#include <iostream>
#include "character.hpp"
using namespace std;
int main() {
character c1;
return 0;
}
character.cpp :
/*_______________________________________________*
|| ||
|| [FILENAME] ||
|| Created by ||
|| Strong21 ||
|| ||
*_______________________________________________*/
#include "character.hpp"
#include <iostream>
using namespace std;
character::character() {
this->c = new classe();
}
character.hpp :
/*_______________________________________________*
|| ||
|| [FILENAME] ||
|| Created by ||
|| Strong21 ||
|| ||
*_______________________________________________*/
#ifndef CHARACTER_HPP
#define CHARACTER_HPP
#include "classe.hpp"
#include <iostream>
using namespace std;
class character
{
public:
character();
private:
classe c;
};
#endif // CHARACTER_HPP
bonjour je n'ais jamais fait de java et j'ai toujours écrits mes header c++ de la même façon (qui fonctionnais très bien) c'est pour cela que je demande une aide donc je ne connais pas la syntaxe java et apprès modification cette erreur arrive
Tes header fonctionnait très bien, tant mieux! Mais ton code relève d'importants problèmes de lignes qui semblent venu d'un autre langage. D'où nos réponses ...
Daimyo_ a écrit:
Salut ! La meilleure idée serait simplement d'apprendre le C++, et de la programmation en général... Parce que le Java++ n'existe pas encore (quoi que le C# existe !). On n'improvise pas la programmation d'un RPG en C++ sans connaître le base de la base et en appelant une classe "classe"...
Depuis ton cette remarque de Daimyo_ tu fournis au nouveau code. La ligne où se produit le problème est une syntaxe qui n'existe pas en C++. C'est non sens total. Coïncidence ça a la syntaxe du Java ou du C# (à part le this qui est du C++ mais qui ne sert à rien ici.)
this->c = new classe();
La réponse de 23antoine03 te signalait déjà le problème. On n'utilise normalement pas le mot new en C++ et il n'a pas du tout le sens de : "je veux créer une variable comme en C# ou Java". D'où l'idée de reprendre tes bases car le C++ et plus compliqué que le C# ou le java. on ne peut pas le pratiquer sans la base de la base minimale (qu'est ce qu'une instance, un pointeur, une référence, un opérateur, un type...?) Je réponds quand même comment supprimer l'erreur que tu as sur la ligne pré-citée :
Le texte ci-dessus est ce qu'il faut faire. L'objet charactercontient un objet classe, que faire pour qu'il existe : RIEN.
Je pense pas que tu sois allé chercher très loin parce qu’il existe au moins 5 tutos sur internet pour presque tout ce que tu dois faire. Le youtubeur e=ri fait des videos sur arduino, il y a la doc, après c’est a toi de comprendre et d’appliquer tes connaissances.
Vous ne pouvez pas comprendre la récursivité sans d’abord avoir compris la récursivité
En recherche d'emploi.
https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/
https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/
En recherche d'emploi.
https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/