so this is for my class and, to be frank, I've never used templated before. Here is my simple vector.h file, but I keep the getting error that templates can not appear at block scope. My understanding of this is that indicates I'm attempting to define in it in a function. Here is my code:
#ifndef SIMPLEVECTOR_H
#define SIMPLEVECTOR_H
#include <iostream>
#include <new> // Needed for bad-alloc exception
#include <cstdlib> // Needed for the exit function
using namespace std;
template <class T>
class SimpleVector {
        private:
        T *aptr; // To point to the allocated array
        int arraysize; // Number of elements in the array
        void memError(); // Handles memory allocation errors
        void subError(); // Handles subscripts out of range
public:
        SimpleVector()
                {
                aptr = 0; arraysize = 0;
                }
        SimpleVector(int s);
        SimpleVector(const SimpleVector &);
        ~SimpleVector();
        int size() const
                {
                return arraysize;
                }
        T getElementAt(int sub);
        T &operator[](const int &);
};
#endif //SIMPLEVECTOR_H
template <class T>
SimpleVector<T>::SimpleVector(int s)
{
        if(s<1)
                {
                arraysize=1;
                }
        else
                {
                arraysize=s;
                }
        try
                {
                aptr = new T [arraysize];
                }
        catch (bad_alloc)
                {
                memError();
                }
        for(int i=0;i<arraysize;i++)
                {
                aptr[i]=0;
                {
} 
template <class T>
void SimpleVector<T>::memError()
{
        cout<<"Error: cannot allocate memory."<<endl;
        exit(EXIT_FAILURE);
}
template <class T>
T SimpleVector<T>::getElementAt(int sub)
{
        return aptr[sub];
}
template <class T>
SimpleVector<T>::~SimpleVector()
{
        if(arraysize>0)
                {
                aptr.clear();
                aptr=aptr[0];
                }
}
template <class T>
void SimpleVector<T>::subError()
{
        cout<<"Subscripts out of range."<<endl;
        exit(EXIT_FAILURE);
}
Then here are the errors I'm getting.
In file included from main.cpp:4:0:
simplevector.h: In constructor ‘SimpleVector<T>::SimpleVector(int)’:
simplevector.h:87:1: error: a template declaration cannot appear at block scope
 template <class T>
 ^
simplevector.h:99:1: error: expected ‘;’ before ‘template’
 template <class T>
 ^
simplevector.h:109:1: error: a template declaration cannot appear at block scope
 template <class T>
 ^
simplevector.h:122:1: error: expected ‘;’ before ‘template’
 template <class T>
 ^
main.cpp:9:1: error: a function-definition is not allowed here before ‘{’ token
 {
 ^
main.cpp:47:1: error: expected ‘}’ at end of input
 }
 ^
main.cpp:47:1: error: expected ‘}’ at end of input
make: *** [main.o] Error 1
Any insight or help would be amazing!
Aucun commentaire:
Enregistrer un commentaire