Question syntaxe C++

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014 - 10 nov. 2007 à 18:12
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014 - 11 nov. 2007 à 23:04
Bonjour,

J'ai c'est la première fois que j'utilise les template en C++ et j'ai un soucis, c'est surement quelque chose de très simple au point que vous allez rire de moi pendant des mois, mais je suis a veille de devenir fou anyway.

#pragma once

template <class T>
class Element
{
    Element* next;
    Element* prev;
    T data;

public:

    Element(T data)
    {
        this->data = data;
    }
};

template <class T>
class CVector
{
public:
    class Element;
private:
    Element* pFirst;
    int nb;

public:
    CVector(void);
    ~CVector(void);
    bool add(T data);
    void remove(Element* pE);

    //T getdata(Element* e);
};

Sa compile sur G++ mais lorsque je tombes dans VC++ ou que je passe dans dans Eclipse j'obtient :

erreur: expected «=", «,", «;", «asm" or «__attribute__" before «<" token    Spidermail    vector_template.h    line 3    1194714081459    5

Qu'est-ce que je fais de mal ?????????????? VC++ c'est la même erreur mais dans terme différent et lui me parle de mettre }; avant template ou je sais plus quoi.

il y a pas d'autres .h en jeu rien qu'un main à part ça.

Assez décourageant pour une fois depuis longtemps que je suis un tantinet motivé.

A+

5 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
10 nov. 2007 à 20:43
template <class T>
class CVector
{
public:
    class Element<T>;

..
};

A mon avis, ca lui fera pas de mal. Mais vu le message d'erreur, c'est pas sur que ce soit uniquement cela.
Faut bien voir que Element et Element<double> n'ont rien a voir, ce sont deux classes totalement différentes.

Donc quand tu dis:

public:
    class Element; <= laquelle ?
0
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
10 nov. 2007 à 21:20
Rebonjour

Class Element fait référence à celle du dessus, en faite sa ne devrait pas être là mais j'ai vu dans un exemple quelqu'un qui le faisait donc j'ai copié en espérant donner un résultat. Bon finalement j'ai utiliser une classe deja faite template en exemple et encore j'obtient une erreur sans queue ni tête sauf quand je vais sous VC++6 la c'est #1 sans erreur mais sous 2003 et 2005 c'est l'hécatombe.

Sous VC6 j'ai plus l'erreur bizaröde mais j'obitent  plutot :
main.obj : error LNK2001: unresolved external symbol "public: __thiscall CVector::~CVector(void)" (??1?$CVector@H@@QAE@XZ)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall CVector::CVector(void)" (??0?$CVector@H@@QAE@XZ)

Il y a peut-être un liens entre les 2 mais que les compilateurs focus pas sur la même chose.

Bon merci de ton aide
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
10 nov. 2007 à 23:18
La c'est simple, il faut simplement que tout le code soit dans le fichier .h. Aucun code dans le cpp, ce qui est compréhensible.
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
11 nov. 2007 à 01:17
il y a pas d'autres .h en jeu rien qu'un main à part ça.

alors ou sont lle code de ton constructeur et destructeur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
11 nov. 2007 à 23:04
Merci pour votre aide mais j'ai fini par réussir à le faire fonctionner :)

http://laptopgun.blogspot.com/
&
0
Rejoignez-nous