Bonjour,
Environnement :
OS : Mac OS X 10.6.4
IDE : Xcode 3.2
Compilateur : GCC 4.2
Je suis en train de me remettre au C++ après avoir eu un très léger apprentissage l'année dernière. Pour cela, je m'entraîne en implémentant les structures de données usuelles. J'ai donc commencé par la pile.
Pour cela j'utilise donc une classe générique (template de classe) :
Stack.h
Stack.cpp
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
21
22
23
24 #ifndef STACK_H_ #define STACK_H_ #include <iostream> template<typename T> class Stack { public: Stack(); virtual ~Stack(); void push(const T); T pop(); bool isEmpty() const; int size() const; private: T* _data; int _size; static void _arrayCopy(T*, T*, int); }; #endif /* STACK_H_ */
Afin de tester ma classe j'ai tout simplement commencé par l'instancier et j'appelle ensuite une méthode :
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 #include "Stack.h" using namespace std; template<typename T> Stack<T>::Stack() : _size(0) { _data = new T[0]; } template<typename T> Stack<T>::~Stack() { delete _data; } template<typename T> void Stack<T>::push(const T element) { T* oldData = _data; _data = new T[++_size]; Stack::_arrayCopy(oldData, _data, _size); delete oldData; } template<typename T> T Stack<T>::pop() { T element = _data[_size - 1]; T* oldData = _data; _data = new T[--_size]; Stack::_arrayCopy(oldData, _data, _size); delete oldData; return element; } template<typename T> bool Stack<T>::isEmpty() const { return _size == 0; } template<typename T> int Stack<T>::size() const { return _size; } template<typename T> void Stack<T>::_arrayCopy(T* source, T* destination, int copyCount) { for (int current = 0; current < copyCount; current++) { destination[current] = source[current]; } }
main.cpp
Mon problème est que mon compilateur ne semble pas reconnaître pile comme étant un objet de ma classe Stack<T> (en l'occurence, un objet de la classe Stack<int>).
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 #include <iostream> #include "Stack.h" using namespace std; int main () { Stack<int> pile(); pile.isEmpty(); return 0; }
Voici l'erreur retournée :
Ce qui me trouble dans ce message d'erreur, c'est que le compilateur mentionne une classe Stack<int> ()() (notez les deux paires de parenthèses).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 /***/***/Workspace/containers/main.cpp:10:0 /***/***/Workspace/containers/main.cpp:10: error: request for member 'isEmpty' in 'pile', which is of non-class type 'Stack<int> ()()'
Étant donné que je manipule les classes génériques pour la première fois en C++, il est possible que mon erreur soit assez simple.
Partager