Łączenie plików nagłówkowych

0

Mam problem z połączeniem plików

Aktualny stan:

kazdy naglowek chroniony poprzez
#ifndefine nazwa
#define nazwa
//instrukcje
#endif

pliki .ccp maja tylko include odpowiednik naglowka (poza mainem)

include.h
includy z bibliotekami

postac.h //klasa talent jako jedno z pól
include "include.h"
include "talent.h"

talent.h //korzysta z pol w klasie postac
include"include.h"
include"postac.h"
metoda: void uzyj(int,postac,postac)

//definicja naranie pusta samo
void talent::uzyj(int ilosc, postac gracz,postac przeciwnik) {}
//konstruktor tez pusty

main.ccp
include "include.h"
include "postac.h"

po stworzeniu zmiennej talent w mainie

talent t;

dostaje 2 te same błędy:

error C2061: syntax error : identifier 'postac'

wskazujące na linijkę deklaracji metody uzyj w talent.h

myślałem ze ifndefy zapobiegną powtarzaniu deklarowania i nie wiem co jest nie tak

jak ma to wyglądać w praktyce
postać gracza ma tabele talentów i statystyki swoje
niektóre talenty korzystają ze statystyk postaci gracza bądź postaci przeciwnika (dlatego w deklaracji funkcji uzyj 2 zmienne postac) w celu ustalenia efektu

0

Klasyka:

  1. W nagłówkach masz mieć tylko definicje klas, bez definicji metod. Wszystkie klasy z których tu korzystasz masz zadeklarować poprzez forward declaration, nie includować nic.
  2. W plikach cpp masz mieć include odpowiedniego pliku *.h i implementacje metod
0

Robię tak jak mówisz:

talent.h

#ifndef TALENT
#define TALENT
#include "include.h" //biblioteki

class postac;

class talent
{
public:
int poziom;
int stopien;
bool akcja;
int karma;
int wyczerpanie;
string tdysc;

talent(){};
~talent(){};
virtual void uzyj(postac,postac);

};

class bron_biala: public talent
{
bron_biala(){};
bron_biala(postac p);
~bron_biala();
void uzyj(postac,postac);
};

#endif

tutaj żadnych błędów

talent.ccp

#include "talent.h"

void talent::uzyj(postac gracz,postac przeciwnik)
{
}

bron_biala::bron_biala(postac p)
{
poziom = 1;
stopien = poziom + p.zrecznosc_stopien;
akcja = true;
karma = 0;
wyczerpanie = 0;
tdysc = "Brak";
}

void bron_biala::uzyj(postac gracz,postac przeciwnik)
{
if(rzut(stopien)<przeciwnik.obrona_fizyczna)
cout << "Nie trafiles przeciwnika";
//else
//obrazenia()
}

wszędzie błędy przy "postac"

0
class postac;

???

0

w talent.cpp dodaj ''#include "postac.h"
Kod na forum umieszczaj w znacznikach code, albo cpp.

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