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

Odpowiedz Nowy wątek
2011-08-05 13:33
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"

Pozostało 580 znaków

2011-08-05 13:41
Autor
 
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.

Pozostało 580 znaków

2011-08-05 13:45
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, '-'));
}

2) 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() )
edytowany 1x, ostatnio: vpiotr, 2011-08-05 13:46

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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