struct naj
{
char* name;
int hp;
int atk;
int obr;
int zad;
int pen;
};
naj* spis = (naj*)malloc(20 * sizeof(naj));
spis[0] = { "Bob", 100, 12, 8, 80, pensja(spis[0].hp, spis[0].atk, spis[0].obr) };
spis[1] = { "Rolf", 120, 8, 10, 80, pensja(spis[1].hp, spis[1].atk, spis[1].obr) };
spis[2] = { "Billy", 80, 10, 12, 80, pensja(spis[2].hp, spis[2].atk, spis[2].obr) };
```c++

- Rejestracja:około 5 lat
- Ostatnio:prawie 4 lata
- Postów:14

- Rejestracja:około 5 lat
- Ostatnio:prawie 4 lata
- Postów:14
kq napisał(a):
Skoro piszesz w C++, to dlaczego utrudniasz sobie życie pisząc w koślawym C? Zresztą, ten kod daje inny komunikat błędu, albo źle przeklejasz, albo źle minimalizujesz przykład.
Tak wygląda cały początek, jeśli ma to pomóc w identyfikacji problemu, a jeśli chodzi o koślawy C to na potrzebę nauczyciela musiałem użyć malloca.
#include <stdlib.h>
#include <iostream>
#include <ctime>
#include <string>
typedef const int cint;
cint MaxHP = 200;
cint MinHP = 50;
cint MaxStat = 30;
cint MinStat = 5;
cint MaxNaj = 20;
cint Podzielnik = 4;
cint baseZad = 80;
cint baseIlosc = 3;
cint przelicznikRenomy = 500;
```c++
struct naj
{
char* name;
int hp;
int atk;
int obr;
int zad;
int pen;
};
naj* spis = (naj*)malloc((MaxNaj) * sizeof(naj));
spis[0] = { "Bob", 100, 12, 8, baseZad, pensja(spis[0].hp, spis[0].atk, spis[0].obr) };
spis[1] = { "Rolf", 120, 8, 10, baseZad, pensja(spis[1].hp, spis[1].atk, spis[1].obr) };
spis[2] = { "Billy", 80, 10, 12, baseZad, pensja(spis[2].hp, spis[2].atk, spis[2].obr) };
```c++

- Rejestracja:prawie 10 lat
- Ostatnio:około 18 godzin
- Postów:530
Jeżeli jest to w C++ i nauczyciel upiera się aby korzystać w tym języku z funkcji malloc
, to ja bym napisał to w następujący sposób.
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
struct naj
{
string name;
int hp {0};
int atk {0};
int obr {0};
int zad {0};
int pen {0};
};
vector<naj> malloc( int size )
{
return vector<naj>(size);
}
int main()
{
auto spis = malloc(20);
spis[0] = { "Bob", 100, 12, 8, 0 , 4 };
spis[1] = { "Rolf", 120, 2, 8, 0 , 4 };
return 0;
}
- Rejestracja:ponad 6 lat
- Ostatnio:3 miesiące
- Postów:242
może byś napisał konkretnie jaki błąd dostajesz, nie kompiluje się, program się zawiesza, źle wyświetla wyniki, etc. Te przykładowe minimum poniżej działa, więc w czym problem?
#include <iostream>
#include <cstdlib>
struct naj_s {
char* name;
int hp;
};
int main() {
const int NAJ_MAX_SIZE = 2;
naj_s* ns = (naj_s*)malloc(sizeof(naj_s) * NAJ_MAX_SIZE);
ns[0] = { "ala", 1};
ns[1] = { "ola", 2};
for (int i = 0; i < NAJ_MAX_SIZE; i++) {
std::cout << "naj_s:" << ns[i].name << "," << ns[i].hp <<'\n';
}
return 0;
}

- Rejestracja:prawie 12 lat
- Ostatnio:minuta
- Postów:1027
Nie wiem z czym masz problemy dokładnie (bo nic nie opisałeś), ale ta linijka nie może działać:
spis[0] = { "Bob", 100, 12, 8, baseZad, pensja(spis[0].hp, spis[0].atk, spis[0].obr) };
gdyż spis[0].hp
nie jest jeszcze wypełnione w momencie wywoływania funkcji pensja
.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.