Jeśli zdeklarowałeś strukture Person w klasie klasa to nazwa Person nie jest normalnie widoczna globalnie. Trzeba wyciągnąć ją z klasy klasa w ten sposób:
klasa::Person klasa::getData(Person p) {
W argumencie nie musiałeś bo argument jest tak jakby częścią klasy i naturalnie typ Person jest widoczny z wnętrza klasy. Podobnie w mainie też musisz się odwoływać do struktury Person przy pomocy operatora zakresu, bo struktura ta nie jest tam widoczna.
Po drugie w tej linijce:
p.name = "adam";
próbujesz zrobić coś takiego:
char name[50];
name = "adam";
Bo stworzenie struktury Person p alokuje wszystkie jej składniki.
EDIT: Doczytałem właśnie, że pierwszy raz spotykasz się ze strukturą. Jeśli tak to nie kombinuj z definiowaniem struktury w ciele innej klasy tylko umieść definicję w obszarze globalnym. Najlepiej w oddzielnym pliku tak jak robisz to z klasami.
Generalnie struktura od klasy różni się tylko domyślnym modyfikatorem zakresu. W klasie jak zrobisz:
class Person {
int wiek;
};
to wiek będzie prywatny, a w strutkurze:
struct Person {
int wiek;
};
będzie publiczny.
To samo przy domyślnym dziedziczeniu.
Poza domyślnym modyfikatorem zakresu struktura od klasy nie różni się niczym. Przynajmniej w C++ (w C struktura nie może mieć metod, bo jest to język strukturalny). Podmień sobie class na struct w klasa.h i zobaczysz, że nic się nie zmieniło.
Z racji domyślnego modyfikatora public w strukturze przyjęło się, że wykorzystuje się ją właśnie jako takie pudełko na kilka publicznych składowych (czyli taka struktura z C).