Имеем простую программу, где я могу вставить строку в статически определенный массив строк размером 20.
Эта программа работала очень хорошо, пока мне не было поручено изменить ее на использование шаблонов, поэтому код (с модификацией) будет поддерживать интергеры или строки.
Используя класс "Shelf" во включенном заголовке, я больше не могу объявить следующий объект int main (), "Shelf book;" - поскольку компилятор говорит мне, что книга не была объявлена, и я скучаю по шаблонным аргументам.
#include<iostream>
#include<string>
#define shelfSize 20
template<class T>
class Shelf{
public:
Shelf();//default constructor
void insert(T&);
private:
string bookshelf[shelfSize];
int counter;
};
template< class T>
Shelf<T>::Shelf(){
for(int i=0; i <shelfSize; i++)
bookshelf[i]="";
counter=0;
}
template< class T>
void Shelf<T>::insert(T &booknum){
bookshelf[counter] = booknum;
counter++;
}
int main(){
Shelf book;
string isbn="";
cout<<"Enter ISBN Number you wish to enter into the Array: "<<endl;
getline(cin, isbn);
book.insert(isbn);
return 0;
}
Очевидно, что я значительно расширил свою программу и хочу сосредоточиться на том, что действительно вызывает у меня проблему.
Итак, как я уже сказал, я получаю следующие ошибки:
Отсутствует шаблон аргументации перед «книгой»;
ожидать ";" перед "книгой".
"книга" необъявленная.