1) I just realized... you have virtual template functions. You can't do that. Template functions can't be virtual.
2) And I still don't know why you're going back to double templates like that. You don't need them here. I guess it doesn't matter, but ew.
3) And you still have the circular include problem. If vector.h is including element.h, then element.h
can't include vector.h. See the link I posted earlier:
http://cplusplus.com/forum/articles/10627/ Read section 4. If element really needs to have vector as part of it (although I don't see why that'd be the case, but that's another issue), then vector needs to be forward declared.
4) You also have const correctness issues, but that probably isn't causing [m]any errors
5) Since you're naming your class "vector",
using namespace std
IS A TERRIBLE TERRIBLE IDEA. You're asking for problems with this. vector is the name of an already existing class, and the only thing stopping your vector class from clashing with std::vector is the std namespace. If you use the using directive, you throw that protection out the window and open yourself up to all sorts of problems. Even if you don't include <vector> yourself,
other headers might do it without you realizing.
6) Your real problem seems to be a design problem. Why do you need to derive from 'element'? What purpose does element serve here? It seems to me like you need to rethink your whole approach here.