C++ : déclaration par pointeur et non par val
Résolu
xc35
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Mesdames , Messieurs, Bonjour !
je me tourne vers vous car je suis face à une incompréhension...je ne peux pas initialiser une classe Vecteur que par pointeur.
ceci fonctionne : Vecteur * v0= new Vecteur(2,2.2);
mais pas ça : Vecteur v0= new Vecteur(2,2.2);
lorsque je veux déclarer une variable de ce type voila ce que me dit le compilateur:
voici ma classe Vecteur.hpp:
et ici mon constructeur dans Vecteur.cpp
c'est surement évident pour un vieux loup de mer du cpp mais moi je rame là!
D'avance, merci beaucoup !
xavier
je me tourne vers vous car je suis face à une incompréhension...je ne peux pas initialiser une classe Vecteur que par pointeur.
ceci fonctionne : Vecteur * v0= new Vecteur(2,2.2);
mais pas ça : Vecteur v0= new Vecteur(2,2.2);
lorsque je veux déclarer une variable de ce type voila ce que me dit le compilateur:
initializing argument 1 of `Vecteur::Vecteur(int, float)' [-fpermissive] make: *** [main.o] Erreur1
voici ma classe Vecteur.hpp:
class Vecteur { private: /* * \brief attributs de la classe vecteur * \brief m_dim nb de coordonnées du vecteur * \brief m_ptr_coord pointeur sur un tableau contenant les coordonnes de chaque dimension */ int m_dim; float * m_ptr_coord ; public: /* * \brief CONSTRUCTEUR dun vecteur * @pre dim >=0 * \param dim nb de coordonnées du vecteur * \param coord de chaque dimensions */ Vecteur (int dim=3, float coord=0.0); ... ... ... }
et ici mon constructeur dans Vecteur.cpp
Vecteur::Vecteur ( int dim , float coord):m_dim(dim),m_ptr_coord(new float[dim]) { assert ( (dim <= m_dim) && (dim>=0)); for ( int i = 0; i < dim ; i++ ){ *(m_ptr_coord+i)=coord; } }
c'est surement évident pour un vieux loup de mer du cpp mais moi je rame là!
D'avance, merci beaucoup !
xavier
1 réponse
Salut.
Ne serait tu pas un programmeur Java à la base ?
En C++, contrairement au Java, on fait la différence entre pointeur et pas pointeur. new sert à allouer de la mémoire, donc lié à un pointeur. Si tu veux définir un objet sur le tas, il suffit de ne pas utiliser new (qui est réservé à la pile) :
Vecteur v0(2,2.2);
En espérant d'avoir un peu aider.
Ne serait tu pas un programmeur Java à la base ?
En C++, contrairement au Java, on fait la différence entre pointeur et pas pointeur. new sert à allouer de la mémoire, donc lié à un pointeur. Si tu veux définir un objet sur le tas, il suffit de ne pas utiliser new (qui est réservé à la pile) :
Vecteur v0(2,2.2);
En espérant d'avoir un peu aider.
J'aurais plutôt dit le contraire : new permet d'allouer dynamiquement dans le tas.