Classe générique et erreur "request for member [..] which is of non-class type"
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
Code:
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_ */ |
Stack.cpp
Code:
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];
}
} |
Afin de tester ma classe j'ai tout simplement commencé par l'instancier et j'appelle ensuite une méthode :
main.cpp
Code:
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;
} |
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>).
Voici l'erreur retournée :
Code:
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> ()()'
|
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).
É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.