C++ : déclaration par pointeur et non par val

Résolu/Fermé
xc35 Messages postés 6 Date d'inscription vendredi 27 janvier 2012 Statut Membre Dernière intervention 14 février 2012 - 14 févr. 2012 à 08:11
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 14 févr. 2012 à 10:45
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:

initializing argument 1 of `Vecteur::Vecteur(int, float)' [-fpermissive]
make: *** [main.o] Erreur 
1

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

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
14 févr. 2012 à 08:21
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.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
14 févr. 2012 à 08:45
Si tu veux définir un objet sur le tas, il suffit de ne pas utiliser new (qui est réservé à la pile) :
J'aurais plutôt dit le contraire : new permet d'allouer dynamiquement dans le tas.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
14 févr. 2012 à 10:45
Arf, j'ai toujours eu du mal avec ces deux truc là. J'arrive pas à trouver de logique dans leur noms...
0