Я довольно новичок в C ++, но уже приобрел некоторый опыт работы с Java.
В следующем коротком упражнении c ++ я попытался построить стек, используя шаблон класса.К сожалению, его не удается скомпилировать, и я не могу понять, почему.
Сообщение об ошибке:
Stack.cpp: 6: ошибка: ожидаемый конструктор, деструктор или преобразование типадо ‘<’
токен
Stack.cpp: 14: ошибка: ожидаемый инициализатор до ‘<’
токен
Stack.cpp: 25: ошибка: ожидаемый инициализатор до ‘<’
токен
make [2]: * [build / Debug / GNU-Linux-x86 / Stack.o] Ошибка 1
Вот Stack.h:
template <class T>
class Stack {
public:
Stack(int = 10);
~Stack() {
delete [] stackPtr;
}
int isEmpty()const {
return top == -1;
}
int isFull() const {
return top == size - 1;
}
int push(const T&);
int pop(T&);
private:
int size; // length i.e. number of elements on Stack.
int top; //index of top element
T* stackPtr;
};
Stack.cpp:
template <class T>
Stack<T>::Stack(int s) {
size = s > 0 && s < 1000 ? s : 15;
top = -1; // initialize stack
stackPtr = new T[size];
}
template <class T>
int Stack<T>::push(const T& item) {
if (!isFull()) {
stackPtr[++top] = item;
return 1; // push successful
}
return 0; // push unsuccessful
}
template <class T>
int Stack<T>::pop(T& popValue) {
if (!isEmpty()) {
popValue = stackPtr[top--];
return 1; // pop successful
}
return 0; // pop unsuccessful
}
Файл main.cpp выглядит так:
#include <iostream>
#include "Stack.h"
using namespace std;
int main(int argc, char** argv) {
Stack<int> intStack;
int i = 1.1;
cout << "Pushing:" << endl;
while (intStack.push(i)) {
cout << i << ' ';
i += 1;
}
cout << endl << "Stack Full" << endl
<< endl << "Popping elements from is" << endl;
while (intStack.pop(i))
cout << i << ' ';
cout << endl << "Stack Empty" << endl;
}
Что здесь не так?