jeudi 27 février 2020

template declaration cannot appear at block scope

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