Tworzenie tablicy obiektów konstruktorem

0

Witam! Zabawiam się w Code::Blocks i tworzę podstawę gry w konsoli :D Napotkałem na problem. Chcę, aby klasa character miała obiekt klasy item. Dokładnie ma być 20 takich "itemów", bo tyle będzie max. niosła każda postać. Kod:

class item
{
    string name;
    int weight;

    item(string aName, int aWeight)
    {
        name = aName;
        weight = aWeight;
    }
};

class character
{
    int hp;
    string name;
    int min_dmg;
    int max_dmg;
    int defense;
    int capacity;
    item items[20]; //tutaj kompilator krzyczy, no bo nie ma konstruktora

    character(int aHp, string aName, int aMin_dmg, int aMax_dmg, int aDefense, int aCapacity)
    {
        hp = aHp;
        name = aName;
        min_dmg = aMin_dmg;
        max_dmg = aMax_dmg;
        defense = aDefense;
        capacity = aCapacity;
    }
};

I co zrobić, żeby te obiekty były, ale każdy przecież musi mieć inne właściwości więc jak rozwiązać ten problem? Tworzenie item1 item2 itd. chyba odpada co nie?

0

Uzyj std::vector i problem z głowy.

0

std::vector też potrzebuje konstruktora domyślnego. Użyj tablicy wskaźników na item i będzie cacy.

0

Udało sie vector'em, działa elegancko, tak jak powinno :)

0

@winerfresh - przecież można utworzyć vector obiektów typu T, gdzie T nie ma domyślnego konstruktora. vector wymaga od T konstruktora kopiującego i operatora =, ale nie domyślnego/bezparametrowego konstruktora (ale jeżeli użyjesz vector::resize() tylko z pierwszym argumentem, to oczywiście w tym momencie użyty zostanie bezparametrowy (lub pasujący) konstruktor - ale nie musisz tego robić). ;)

#include <vector>

class A {
public:
    A(int) {}
};

int main() {
    using namespace std;
    
    vector<A> s;
    s.resize(3, A(1));
    s.push_back(A(2));
    s[0] = A(3);
    return 0;
}
0

Ale po co wytaczać artylerię przeciwko musze? Sądzę, że tablica o statycznym rozmiarze w tym wypadku będzie szybsza i prostsza w użyciu (jak nie ma przedmiotu na danym slocie to dajesz po prostu NULL).

0

Oj tam zaraz artyleria, wykazałem po prostu błąd w Twojej wypowiedzi. ;) Swoją drogą, w C++0x zdaje się, że nie będzie też wymagań co do T dla "całego" kontenera, a tylko dla konkretnych operacji.

No i dla Ciebie to rozwiązanie "cięższe", a dla mnie bardziej elastyczne.

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