Вероятно, вы включаете файл .h дважды, при первом определении он определяет Student, а второй при попытке его переопределить.
См. Запись в Википедии о включении охранников для более подробного объяснения проблемы и информации о том, как ее избежать.
Короче говоря, есть два способа сделать это
Версия 1, #defined включает охранников
#ifndef STUDENT_HPP
#define STUDENT_HPP
...your code here...
#endif
Обычно #define называется некоторым вариантом имени файла, поскольку оно должно быть разным в каждом включаемом файле.
Версия 2, #pragma Once
#pragma once
...your code here...
Эта прагма (как и большинство прагм) не переносима на все компиляторы, но некоторые из наиболее важных . Он также имеет то преимущество, что ему не нужно назначать имя вручную.
Что вы используете, зависит от вас, но вам, скорее всего, придется выбрать один:)