Прежде чем вы отметите этот вопрос как дубликат, поймите, что я действительно посмотрел сообщение this и другие подобные на сайте. Моя проблема заключается не в понимании того, как переменные области и/или препроцессор работают. У меня их нет.Переменная C++, не объявленная в области
Я не могу понять эту неприятную проблему в моем коде. Я просто пытаюсь смоделировать структуру данных стека с помощью C++. Компилятор продолжает жаловаться, что size
и capacity
не были объявлены в этой области (для Stack.cpp
). Есть три файла:
- Stack.h
- Stack.cpp
- main.cpp
Ниже приведены фрагменты кода для заголовка файла и файл .cpp:
Stack.h
#ifndef STACK_H_
#define STACK_H_
#include <iostream>
#include <string>
using namespace std;
template<typename T>
class Stack
{
public:
Stack();
void push(T item);
T pop();
private:
int size;
const int capacity = 10;
T items[];
};
#endif
Stack.cpp
#include "Stack.h"
using namespace std;
template<typename T>
Stack::Stack() : items[capacity]
{
size = 0;
}
template<typename T>
void Stack::push(T item)
{
if(size == capacity)
{
cout << "No more room left. Unable to add items.";
}
else
{
items[size-1] = item;
size++;
}
}
template<typename T>
T Stack::pop()
{
if(size == 0)
{
cout << "Stack is empty. There is nothing to remove.";
}
else
{
size--;
}
}
Компилятор также странно жалуется, что «„шаблон класса Stack“используется без параметров шаблона аннулируются Stack :: толчок (T элемент)», который не имеет особого смысла, видя как я использовал заголовок шаблона перед функцией-членом.
Может кто-то прояснить, что я сделал неправильно?
http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file направит вас в лучшем направлении. Также шаблонное имя-типа - Stack. –