Question syntaxe C++

Signaler
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014
-
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014
-
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

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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 ?
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

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
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
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
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

Merci pour votre aide mais j'ai fini par réussir à le faire fonctionner :)

http://laptopgun.blogspot.com/
&