Po pierwsze: twoja klasa nie jest zakończona średnikiem (za klamrą zamykającą).
Po drugie: niektóre kompilatory nie lubią funkcji void main(), zamień na int main() i zwróć 0 przy wyjściu z funkcji.
Po trzecie: twoja pętla za każdym razem zada pierwsze pytanie. A oto i winowajca:
if (int i=p1.GetNumber()) { ...}
Wewnątrz ifa definiujesz nową zmienną "i" a następnie przypisujesz do niej wartość p1.GetNumber().
Cały kod "wewnątrz" ifa zwraca wartość (int)1 co jest interpretowane jako (bool)true.
Poprawne porównanie wygląda tak:
if (i==p1.GetNumber()) { ...}
Jeżeli twój kompilator nie zgłasza ostrzeżeń w liniach 34,36,38 i 40 to powinieneś zmienić go na coś lepszego (nowszego)