Jak dobrać się do obiektu klasy B, który jest utworzony w klasie A ?

0

Witam. Mam klasę Team oraz klasę User. Poniżej przedstawiam definicje tych klas.

 
class Team
{
	private:
		User * user_a;
		User * user_b;

	public:
		Team();
		void displayMembers();
};
Team::Team()
{
	User user_a(1, '+');
	User user_b(2, '-');
}
void Team::displayMembers()
{
	cout << "W zespole sa: " << user_a->getName() << " oraz " << user_b->getName() << endl;
}
class User
{
	private:
		string name;
		char symbol;
		int id;

	public:
		User(int, char);
		User();
		string getName();
};
User::User(int num, char sign)
{
	cout << "Player " << num << " - insert your name: ";
	cin >> name;
	id = num;
	symbol = sign;
	cout << name << ", your sign is: " << symbol << endl << endl;
}
string User::getName()
{
	return name;
}
  1. Chcę, żeby podczas tworzenia obiektu klasy Team tworzone były 2 obiekty User. Obiekty User są wypełniane poprzez konstruktor (podaję w nim id i symbol użytkownika natomiast nazwę pobieram bezpośrednio od gracza). Czy sposób w jaki to robię jest prawidłowy - chodzi mi tu o implementację konstruktora klasy Team ?
  2. Jak w metodzie Team::displayMembers() dobrać się do obiektów klasy User ? W obecnej chwili otrzymuję błąd "Access violation reading location"
1
 
Team::Team()
{
        User user_a(1, '+');
        User user_b(2, '-');
}
Team::Team()
{
        user_a = new User(1, '+');
        user_b = new User(2, '-');
}
 

Zle tworzysz obiekt, tworzysz dwie zmienne o tej samej nazwie co sa w klasie, jednoczesnie nadpisujesz te zmienne. Zastap to co Ci napisalem i powinno byc ok.

1
  1. Klasę team zmień:
    z
User * user_a;
User * user_b;

na:

std::auto_ptr<User> user_a;
std::auto_ptr<User> user_b;

oraz

Team::Team()
{
        user_a.reset(new User(1, '+'));
        user_b.reset(new User(2, '-'));
}
  1. Z konstruktora user wywal I/O - tak się nie robi (styl).
    Dodaj
  • User::readName,
  • User::displayName
    i wywołaj je gdzieś (np. w User::prepare() )

1 użytkowników online, w tym zalogowanych: 0, gości: 1