The following function overload matches your call, and that gives your the compilation errors, because that overload expects iterators:
template<class InputIterator , class OutputIterator >
OutputIterator CGAL::intersection (InputIterator begin,
InputIterator end,
OutputIterator oi );
You need to modify your call that way, with explicit casting to the base class:
CGAL::intersection((SimplePolygon&)polygon1,
(SimplePolygon&)polygon2,
std::back_inserter(intersections));