Bonjour,

J'ai déclaré une "interface" pour les conteneurs de type LIFO sous la forme d'une classe générique abstraite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
#ifndef LIFO_H_
#define LIFO_H_
 
template<typename T>
class Lifo {
public:
    virtual void push(const T&) =0;
    virtual T pop() =0;
    virtual bool isEmpty() const =0;
    virtual int size() const =0;
};
 
#endif // LIFO_H_
Plusieurs classes héritent de la classe générique abstraite Lifo<T> et en définissent les fonctions membres, dont la classe générique BasicStack<T>.

J'ai ensuite voulu déclaré une classe de test qui pourrait manipuler n'importe quel objet à travers les fonctions membres de l'interface Lifo<T>.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
#ifndef LIFOTEST_H_
#define LIFOTEST_H_
 
#include "Lifo.h"
 
class LifoTest {
public:
    template<typename T>
    LifoTest(Lifo<T>*);
 
    void run();
private:
    template<typename T>
    Lifo<T>* container;
};
 
#include "LifoTest.tpp"
 
#endif // LIFOTEST_H_
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
int main() {
    BasicStack<int> pile;
 
    LifoTest test(&pile);
    test.run();
 
    return 0;
}
Mais j'ai une erreur à la compilation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4

Data member '_container' cannot be a member template
Sachant que le membre _container est l'objet que je souhaite manipuler dans la fonction membre run(). J'ai utilisé un pointeur afin de pouvoir utiliser le polymorphisme.