[C++] Classe template vecteur.
Résolu/Fermé
Coranys
Messages postés
5
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 décembre 2007
-
14 déc. 2007 à 23:44
ekra Messages postés 1870 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 24 juillet 2014 - 20 déc. 2007 à 12:22
ekra Messages postés 1870 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 24 juillet 2014 - 20 déc. 2007 à 12:22
A voir également:
- [C++] Classe template vecteur.
- Classe ram - Guide
- Retrouver photo de classe gratuitement ✓ - Forum Vos droits sur internet
- Explorer.exe classe non enregistrée - Forum Windows 10
- Ou peut-on retrouver d'anciennes photos d'école et d'anciens élèves ? ✓ - Forum Loisirs / Divertissements
- Vecteur sur word ✓ - Forum Word
11 réponses
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
20 déc. 2007 à 12:22
20 déc. 2007 à 12:22
Effectivement, fait attention, tu as mis des templates dans un .cpp ....
Si tu veux tout de meme garder cela tu dois ajouter
dans ton fichier .cpp
Voilà, sinon il y a la classe "vector" bien sûre mais je pensais que tu programmais cela comme un exercice...
Si tu veux tout de meme garder cela tu dois ajouter
template Vecteur<int>;
dans ton fichier .cpp
Voilà, sinon il y a la classe "vector" bien sûre mais je pensais que tu programmais cela comme un exercice...
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
15 déc. 2007 à 01:52
15 déc. 2007 à 01:52
Bonsoir,
Peux-tu inclure les erreurs, ca permet de nous aider pour chercher plutôt que de faire toutes les manips !
Peux-tu inclure les erreurs, ca permet de nous aider pour chercher plutôt que de faire toutes les manips !
Coranys
Messages postés
5
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 décembre 2007
15 déc. 2007 à 02:00
15 déc. 2007 à 02:00
Bonsoir,
Déjà les problèmes commencent fort :
Je travaille sous Microsoft Visual C++ et quand je double-clique sur une fonction de "Vecteur.h", il me dit "Cannot find the definition (implementation) of this function".
Il y a donc déjà un problème dans mes déclarations :s
Quand je compile le cxx, j'ai actuellement trois erreurs :
(14) error C2143: syntax error : missing ';' before 'tag::id'
(14) error C2501: 'T' : missing storage-class or type specifiers
(14) fatal error C1004: unexpected end of file found
La ligne 14 étant :
*T Vecteur<class T>::getElement () const
A l'aveuglette, j'ai mis le "*" devant le T (au lieu de derrière) pour voir.
Résultats : 102 erreurs, des "error C2143: syntax error : missing ';' before '}' en majorité
Petite édition : Merci d'avance de répondre :D
Déjà les problèmes commencent fort :
Je travaille sous Microsoft Visual C++ et quand je double-clique sur une fonction de "Vecteur.h", il me dit "Cannot find the definition (implementation) of this function".
Il y a donc déjà un problème dans mes déclarations :s
Quand je compile le cxx, j'ai actuellement trois erreurs :
(14) error C2143: syntax error : missing ';' before 'tag::id'
(14) error C2501: 'T' : missing storage-class or type specifiers
(14) fatal error C1004: unexpected end of file found
La ligne 14 étant :
*T Vecteur<class T>::getElement () const
A l'aveuglette, j'ai mis le "*" devant le T (au lieu de derrière) pour voir.
Résultats : 102 erreurs, des "error C2143: syntax error : missing ';' before '}' en majorité
Petite édition : Merci d'avance de répondre :D
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
15 déc. 2007 à 12:19
15 déc. 2007 à 12:19
Tu as marqué :
Et c'est :
De même pour les autres méthodes.
:)
*T Vecteur<class T>::getElement () const { return data; }
Et c'est :
template <class T> T* Vecteur<T>::getElement () const { return data; }
De même pour les autres méthodes.
:)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Coranys
Messages postés
5
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 décembre 2007
15 déc. 2007 à 19:29
15 déc. 2007 à 19:29
Merci beaucoup pour cette réponse :)
Cela dit, je crois que pour l'heure ça n'a pas réglé le problème ^^'
Donc, j'ai bien repris ta syntaxe.
Ce qui donne :
/*Fichier "Vecteur.cxx"*/
#include "Vecteur.h"
#include <string>
#include <iostream.h>
#include <stdlib.h>
/*using namespace std;*/ /*Permet d'utiliser les cout avec une syntaxe moins lourde*/
/**************************************/
/*DECLARATIONS DES METHODES "getXXX()"*/
/**************************************/
template <class T>
T* Vecteur<T>::getElement () const
{
return data;
}
/**************************************/
/*DECLARATIONS DES METHODES "setXXX()"*/
/**************************************/
template <class T>
void Vecteur<T>::setElement (const int Set_Indice, const T Set_Element)
{
data[Set_Indice] = Set_Element;
}
/*************************/
/*CONSTRUCTEUR PAR DEFAUT*/
/*************************/
template <class T>
Vecteur<T>::Vecteur ()
{
cout << "Nous utilisons le constructeur PAR DEFAUT de Vecteur." << endl;
data = new type[10];
NbElem = 10;
}
/*******************************/
/*CONSTRUCTEUR D'INITIALISATION*/
/*******************************/
template <class T>
Vecteur<T>::Vecteur(const int INIT_NbElem)
{
cout << "Nous utilisons le constructeur d'INITIALISATION de Vecteur." << endl;
data = new type[INIT_NbElem];
NbElem = INIT_NbElem;
}
/*************/
/*DESTRUCTEUR*/
/*************/
template <class T>
Vecteur<T>::~Vecteur ()
{
cout << "Destructeur de Vecteur en cours..." << endl;
if (data)
{
delete data;
}
cout << "Destructeur de Vecteur termine." << endl;
}
/**********************/
/*FONCTION D'AFFICHAGE*/
/**********************/
template <class T>
void Vecteur<T>::affiche ()
{
int i;
while (i < NbElem)
{
cout << data[i] << endl;
i++;
}
}
/*FIN DE CODE*/
Le fichier "Vecteur.h" n'a pas changé donc.
J'ai maintenant deux erreurs :
(29) error C2244: 'Vecteur<T>::setElement' : unable to resolve function overload
(36) error C2954: template definitions cannot nest
La ligne 29 étant :
25 - template <class T>
26 - void Vecteur<T>::setElement (const int Set_Indice, const T Set_Element)
27 - {
28 - data[Set_Indice] = Set_Element;
29 - }
Et la ligne 36 étant :
36 - template <class T>
37 - Vecteur<T>::Vecteur ()
38 - {
39 - cout << "Nous utilisons le constructeur PAR DEFAUT de Vecteur." << endl;
Et surtout : j'ai encore ce problème qui fait que quand je double-clique sur une fonction de "Vecteur.h" (sous VC++), il me dit "Cannot find the definition (implementation) of this function". :(
Encore une fois : merci d'avance de répondre :p
Cela dit, je crois que pour l'heure ça n'a pas réglé le problème ^^'
Donc, j'ai bien repris ta syntaxe.
Ce qui donne :
/*Fichier "Vecteur.cxx"*/
#include "Vecteur.h"
#include <string>
#include <iostream.h>
#include <stdlib.h>
/*using namespace std;*/ /*Permet d'utiliser les cout avec une syntaxe moins lourde*/
/**************************************/
/*DECLARATIONS DES METHODES "getXXX()"*/
/**************************************/
template <class T>
T* Vecteur<T>::getElement () const
{
return data;
}
/**************************************/
/*DECLARATIONS DES METHODES "setXXX()"*/
/**************************************/
template <class T>
void Vecteur<T>::setElement (const int Set_Indice, const T Set_Element)
{
data[Set_Indice] = Set_Element;
}
/*************************/
/*CONSTRUCTEUR PAR DEFAUT*/
/*************************/
template <class T>
Vecteur<T>::Vecteur ()
{
cout << "Nous utilisons le constructeur PAR DEFAUT de Vecteur." << endl;
data = new type[10];
NbElem = 10;
}
/*******************************/
/*CONSTRUCTEUR D'INITIALISATION*/
/*******************************/
template <class T>
Vecteur<T>::Vecteur(const int INIT_NbElem)
{
cout << "Nous utilisons le constructeur d'INITIALISATION de Vecteur." << endl;
data = new type[INIT_NbElem];
NbElem = INIT_NbElem;
}
/*************/
/*DESTRUCTEUR*/
/*************/
template <class T>
Vecteur<T>::~Vecteur ()
{
cout << "Destructeur de Vecteur en cours..." << endl;
if (data)
{
delete data;
}
cout << "Destructeur de Vecteur termine." << endl;
}
/**********************/
/*FONCTION D'AFFICHAGE*/
/**********************/
template <class T>
void Vecteur<T>::affiche ()
{
int i;
while (i < NbElem)
{
cout << data[i] << endl;
i++;
}
}
/*FIN DE CODE*/
Le fichier "Vecteur.h" n'a pas changé donc.
J'ai maintenant deux erreurs :
(29) error C2244: 'Vecteur<T>::setElement' : unable to resolve function overload
(36) error C2954: template definitions cannot nest
La ligne 29 étant :
25 - template <class T>
26 - void Vecteur<T>::setElement (const int Set_Indice, const T Set_Element)
27 - {
28 - data[Set_Indice] = Set_Element;
29 - }
Et la ligne 36 étant :
36 - template <class T>
37 - Vecteur<T>::Vecteur ()
38 - {
39 - cout << "Nous utilisons le constructeur PAR DEFAUT de Vecteur." << endl;
Et surtout : j'ai encore ce problème qui fait que quand je double-clique sur une fonction de "Vecteur.h" (sous VC++), il me dit "Cannot find the definition (implementation) of this function". :(
Encore une fois : merci d'avance de répondre :p
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
16 déc. 2007 à 11:41
16 déc. 2007 à 11:41
Hey bien tu as déclaré une signature
setElement(int,T*)
et tu lui propose un (int,T) => normal
Ensuite
new type => new T[10];
(erreure plusieurs fois)
Bon ça devrait être mieux :)
setElement(int,T*)
et tu lui propose un (int,T) => normal
Ensuite
template <class T> Vecteur<T>::Vecteur () { cout << "Nous utilisons le constructeur PAR DEFAUT de Vecteur." << endl; data = new type[10]; NbElem = 10; }
new type => new T[10];
(erreure plusieurs fois)
Bon ça devrait être mieux :)
Coranys
Messages postés
5
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 décembre 2007
16 déc. 2007 à 17:01
16 déc. 2007 à 17:01
Yay! ^^
Ca compile sans aucun warning et aucune erreur! :D
Dernier problème : pourquoi est-ce que j'ai encore ce problème qui fait que quand je double-clique sur une fonction de "Vecteur.h" (sous VC++), il me dit "Cannot find the definition (implementation) of this function"? ^^'
Ca signifie qu'il n'arrivera pas à faire le lien entre le fichier h et le fichier cxx si je ne m'abuse...
Ce n'est pas normal, n'est-ce pas?
Si je devais dire... Je penserais qu'il y a un problème dans mes déclarations de prototypes mais je ne vois pas quoi :s
Il faut peut-être que je mette des "template" dans toutes mes déclarations dans le fichier .h?
Merci d'avance, ekra :p
Ca compile sans aucun warning et aucune erreur! :D
Dernier problème : pourquoi est-ce que j'ai encore ce problème qui fait que quand je double-clique sur une fonction de "Vecteur.h" (sous VC++), il me dit "Cannot find the definition (implementation) of this function"? ^^'
Ca signifie qu'il n'arrivera pas à faire le lien entre le fichier h et le fichier cxx si je ne m'abuse...
Ce n'est pas normal, n'est-ce pas?
Si je devais dire... Je penserais qu'il y a un problème dans mes déclarations de prototypes mais je ne vois pas quoi :s
Il faut peut-être que je mette des "template" dans toutes mes déclarations dans le fichier .h?
Merci d'avance, ekra :p
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
16 déc. 2007 à 18:16
16 déc. 2007 à 18:16
Re,
Ton fichier .h est très bien comme ca.
Je pense que le problème vient de Visual C++ (pas de la syntaxe C++) il ne doit pas faire le lien entre les fonctions que tu as déclarées et celles que tu as définies. Peut-être dois-tu simplement ajouter le fichier à ton projet, ou faire plein de clics je ne sais pas ou...
Désolé, mais je ne dispose pas de Visual C++. Je ne peux t'aider que sur le langage C++.
Bon courage !
Ton fichier .h est très bien comme ca.
Je pense que le problème vient de Visual C++ (pas de la syntaxe C++) il ne doit pas faire le lien entre les fonctions que tu as déclarées et celles que tu as définies. Peut-être dois-tu simplement ajouter le fichier à ton projet, ou faire plein de clics je ne sais pas ou...
Désolé, mais je ne dispose pas de Visual C++. Je ne peux t'aider que sur le langage C++.
Bon courage !
Coranys
Messages postés
5
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 décembre 2007
16 déc. 2007 à 18:30
16 déc. 2007 à 18:30
Mmh... Je tente de tester comme ça donc.
J'ai un main avec :
cout << "Creation d'un vecteur de 5 cases..." << endl;
Vecteur<int> vec(5);
vec.affiche();
cout << endl;
Et j'ai les erreurs suivantes :
error LNK2001: unresolved external symbol "public: __thiscall Vecteur<int>::~Vecteur<int>(void)" (??1?$Vecteur@H@@QAE@XZ)
error LNK2001: unresolved external symbol "public: void __thiscall Vecteur<int>::affiche(void)" (?affiche@?$Vecteur@H@@QAEXXZ)
error LNK2001: unresolved external symbol "public: __thiscall Vecteur<int>::Vecteur<int>(int)" (??0?$Vecteur@H@@QAE@H@Z)
(pas de précision sur les lignes frauduleuses, étrangement)
J'ai mis
Vecteur<int> vec(5);
vec.affiche();
en commentaires et là, il n'y a pas d'erreur.
Y'aurait-il un problème sur ma façon de déclarer mon vecteur template d'int? :s
J'ai un main avec :
cout << "Creation d'un vecteur de 5 cases..." << endl;
Vecteur<int> vec(5);
vec.affiche();
cout << endl;
Et j'ai les erreurs suivantes :
error LNK2001: unresolved external symbol "public: __thiscall Vecteur<int>::~Vecteur<int>(void)" (??1?$Vecteur@H@@QAE@XZ)
error LNK2001: unresolved external symbol "public: void __thiscall Vecteur<int>::affiche(void)" (?affiche@?$Vecteur@H@@QAEXXZ)
error LNK2001: unresolved external symbol "public: __thiscall Vecteur<int>::Vecteur<int>(int)" (??0?$Vecteur@H@@QAE@H@Z)
(pas de précision sur les lignes frauduleuses, étrangement)
J'ai mis
Vecteur<int> vec(5);
vec.affiche();
en commentaires et là, il n'y a pas d'erreur.
Y'aurait-il un problème sur ma façon de déclarer mon vecteur template d'int? :s
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
19 déc. 2007 à 18:55
19 déc. 2007 à 18:55
A priori non...
mamiemando
Messages postés
33600
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
24 mars 2025
7 835
19 déc. 2007 à 21:09
19 déc. 2007 à 21:09
Heu question complètement stupide, pourquoi tu ne réutilise pas simplement la classe std::vector de la STL ? C'est un exercice ?
Pour ton erreur de compilation, vérifie que tu as bien mis le code des fonctions templates et des méthodes de classes templates dans le header, sinon ça ne peut pas marcher.
Bonne chance
Pour ton erreur de compilation, vérifie que tu as bien mis le code des fonctions templates et des méthodes de classes templates dans le header, sinon ça ne peut pas marcher.
Bonne chance