Procedury i metody nie rozpoznają obiektów C++

Siemano, piszę sobie łatwą grę RPG w konsoli.

Problem w tym że gdy ją kompiluje to cały czas mam jeden błąd który mi przeszkadza w dalszym pisaniu gry… Męcze się z tym problemem cały czas.

Błąd to :  ‘Postacie’ was not declared in this scope.

A tutaj daję kod. :slight_smile:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <windows.h>

void dodawanie();

using namespace std;


int losowa = rand()%4;
string klasa[4]={"Wojownik","Mag","Skrytobojca","Lucznik"};

class Postac
{
public:
    string imie;
    string Klasa;

    int sila;
    int magia;
    int zwinnosc;
    int strzelanie;


    Postac(string i, string k, int si, int m, int z, int st)
    {
        { imie = i; Klasa = k; sila = si; magia = m; zwinnosc = z; strzelanie = st;}
    }

    void dodawanie();




};









int main()
{

    Postac Postacie[7]= {
    Postac("Gracz","?",0,0,0,0),
    Postac("Gracz2","?",0,0,0,0),
    Postac("Gracz3","?",0,0,0,0),
    Postac("Gracz4","?",0,0,0,0),
    Postac("Gracz5","?",0,0,0,0),
    Postac("Gracz6","?",0,0,0,0),
    Postac("Gracz7","?",0,0,0,0)
    };

    srand ( (unsigned int)time(NULL) );
    Postacie[0].dodawanie();













}

void dodawanie()
{


    cout<<"Podaj swoje imie: ";
    cin>>Postacie[0].imie;

    Postac*Gracz;
    Gracz=&Postacie[0];

    Postac*Gracz2;
    Gracz2=&Postacie[1];

    Postac*Gracz3;
    Gracz3=&Postacie[2];

    Postac*Gracz4;
    Gracz4=&Postacie[3];

    Postac*Gracz5;
    Gracz5=&Postacie[4];

    Postac*Gracz6;
    Gracz6=&Postacie[5];

    Postac*Gracz7;
    Gracz7=&Postacie[6];

    Postacie[0].Klasa=klasa[rand()%4];
    Postacie[1].Klasa=klasa[rand()%4];
    Postacie[2].Klasa=klasa[rand()%4];
    Postacie[3].Klasa=klasa[rand()%4];
    Postacie[4].Klasa=klasa[rand()%4];
    Postacie[5].Klasa=klasa[rand()%4];
    Postacie[6].Klasa=klasa[rand()%4];

    int i;
    for(i = 0; i <= 6; i++)
    {
    if(Postacie[i].Klasa=="Wojownik")
    {
      Postacie[i].sila=10;
      Postacie[i].magia=0;
      Postacie[i].zwinnosc=5;
      Postacie[i].strzelanie=0;
    }
    else if(Postacie[i].Klasa=="Mag")
    {
      Postacie[i].sila=0;
      Postacie[i].magia=10;
      Postacie[i].zwinnosc=5;
      Postacie[i].strzelanie=0;
    }
    else if(Postacie[i].Klasa=="Skrytobojca")
    {
      Postacie[i].sila=0;
      Postacie[i].magia=0;
      Postacie[i].zwinnosc=10;
      Postacie[i].strzelanie=5;
    }
    else if(Postacie[i].Klasa=="Lucznik")
    {
      Postacie[i].sila=0;
      Postacie[i].magia=0;
      Postacie[i].zwinnosc=5;
      Postacie[i].strzelanie=10;
    }
    }

    int p;


    for(p=0;p<=6;p++)
    {
    cout<<"Klasa "<<Postacie[p].imie<<" to "<<Postacie[p].Klasa<<endl;
    cout<<"Sila "<<Postacie[p].imie<<" to "<<Postacie[p].sila<<endl;
    cout<<"Magia "<<Postacie[p].imie<<" to "<<Postacie[p].magia<<endl;
    cout<<"Zwinnosc "<<Postacie[p].imie<<" to "<<Postacie[p].zwinnosc<<endl;
    cout<<"Strzelanie "<<Postacie[p].imie<<" to "<<Postacie[p].strzelanie<<endl<<endl<<endl;
    Sleep(2000);
    }

}

Poczytaj sobie o zakresie widoczności zmiennych - Postacie są widoczne tylko i wyłączne wewnątrz funkcji main. Poza tym to forum nie bardzo jest dedykowane do tego typu zagadnień.

Czyli należało by utworzyć wskaźniki?

Nawet jak przeniosę utworzone wskaźniki które są w procedorze do int main to nawet kompilator wskaźników nie rozponaje…

Polecam:

:wink:

Nie. Musisz przesłać referencję do funkcji:

void dodawanie(Postac* Postacie);

Dodatkowo, funkcja dodawanie() nie jest wewątrz klasy. Aby taka była, musisz ją zdefiniować jako

void Postac::dodawanie(Postac* Postacie);

Swoją drogą, forma mnoga słowa “postać”, brzmiąca “postaci” jest ładniejsza :wink:

Poza tym dobrym nawykiem jest wyrzucanie nawet malej klasy do osobnego pliku - wraz ze wzrostem objetosci kodu gry szybko deocenisz to podejście.

Dzięki wam za pomoc. :slight_smile:

 

Dla tych którzy też tutaj szukają pomocy to napisze od siebie że wystarczy spróbować ze wskaźnikami “this” i ze sposobem zwracania i ustawiania wartości. :slight_smile:

I tak jak enedil mówił to też trzeba dodawać referencje do funkcji . :slight_smile:

Problem rozwiązany.