Grazie 
Adesso però ho un altro problema! Quando compilo questo
#include <iostream>
#include <cstdlib>
#include "Dividi.h"
using namespace std;
  double y(const double x)
  {
   double y = pow((pow(x,3)-pow (x,2) - x - 1),3);
   return y;
  }
  
  int main()
  {
   Dividi<double> Dividi(-1.0, 2.0, 1000);
   cout << "Gli zeri della funzione sono nei seguenti intervalli: " << Dividi.Calcola(y) << endl;
   
   return 0;
  }
mi dice che nel .h (questo):
#include <limits>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include "array1D.h"
#include "mathLib.h"
using namespace std;
  template <typename TYPE>
  class Dividi
  {
    public:
        Dividi (TYPE left, TYPE right, int j)
        {
            this->left = left;
            this->right = right;
            this->j = j;
            toll = std::numeric_limits<TYPE>::epsilon();
            toll *= 100.;
            double delta = toll;
            double epsilon = toll;
        }
        
        TYPE get_left()
        {
            return left;
        }
       TYPE get_right()
        {
            return right;
        }
   
        
      
    private:
      TYPE left;
      TYPE right;
      int j;
      TYPE toll;  
      TYPE yleft;
      TYPE yright;
      TYPE intervallo;
      TYPE Dx;
      // dentro il vettore intervallo ci sono tanti valori quanti gli zeri della funzione
      // intervallo contiene gli intervallini i cui estremi sono discordi
  };
  
  
  MyLib::Array1D<TYPE> Dividi<TYPE>::Calcola(TYPE y(const TYPE x))
  {   
      intervallo = right - left;
      Dx = intervallo/1000;
      MyLib::Array1D<TYPE> intervallini;
      for ( j = 0; j < 1000; j++)
      {
        cout << "!! j = " << j << endl;
        yleft = y(left);
        right = left + Dx;
        yright = y(right);
        cout << "!! left = " << left << "! f(left) = " << yleft << endl;
        cout << "!! right = " << right << "! f(right) = " << yright << endl;
        if (yleft*yright < (TYPE) 0)
        {
            intervallini.push_back(left);
            intervallini.push_back(right);
//            return 0;
        // fa parte del vettore intervallo
        
       
          //inseriamo qui l'algoritmo della bisezione
		  for (int k = 1; k < 20; k++)
		  {
		    intervallo = intervallo/2.0;
		    centro = left + intervallo;
		    centroFcn = y(centro);
                    if (intervallo < delta || abs(centroFcn) < epsilon)
                    {
		      return centro;
		      cout << "Lo zero della funzione e': " << centro << endl;
		    }
                    if (y(left) * y(centro) < 0)
                    {
		      right = centro;
		      rightFcn = centroFcn;
                    }
                    else
                    {
		      left = centro;
		      leftFcn = centroFcn;
                    }
                   }
         } // qui finisce l'algoritmo di bisezione
         else
         {
//            non fa parte del vettore intervallo 
            cout << " !!! NON ESISTONO ZERI IN QUESTO INTERVALLO !!! " << endl;
         }
	  left = left + Dx;
//            right = right + Dx;
	  right = left + Dx;
	} 
       }
     return (intervallini);
   }
mi dà gli errori nell'allegato
Non so più cosa fare...
Allegati:
Questi sono gli errori