|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Domanda idiota c++... confusione con gli header
Salve,
sto cercando di programmare un gioco in c++ usando OGRE. Il problema è che come al solito nn riesco ad includere tutti gli header senza che non debba includerne uno 2 volte... allora...cerco di spiegarmi ![]() Codice:
<object.h> -Class Object- con le variabili genrali, la fisica ecc. <weapon.h> -class Weapon : public Object- che sono le armi. -class WeaponConfig : protected weapon-, dove sono salvate le impostazioni di un arma. <player.h> -class Player : public Object-, che sarebbero i personaggi. -class PlayerConfig : protected Player-. Poi per amministrare e creare il tutto ho: <objectManager.h> -class ObjectManager - Quindi mi vengono fuori 2 problemi: tutti i parametri di impostazione sia di Object che di Weapon sono protected, quindi visto che ObjectManager deve settarli in WeaponConfig ho pensato di impostarlo come suo friend. Mi pare brutto sia fare 1 metodo per ogni parametro per ricavarli singolarmente (cosa che mi serve), sia metterli tutti public. Purtroppo non posso includere objectmanager.h in weapon.h perchè weapon.h è incluso in objectmanager.h.... ![]() Anche se risolvessi poi c'è il secondo problema: nn potrei includere sia player.h che weapon.h in objectmanager.h visto che entrambi i primi due includono object.h che quindi sarebbe duplicato... ![]() ![]() Spero che qualcuno abbia capito cosa ho cercato di comunicarvi visto che sta roba nn è chiara nemmeno a me ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Solitamente gli header sono scritti così:
#ifndef __NOMEHEADER__ #define __NOMEHEADER__ //corpo dell'header #endif In questo modo l'inclusione doppia di un header non avviene... PS: non è detto che il formato sia proprio __NOMEHEADER__ |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Dec 2005
Città: Provincia di Vicenza
Messaggi: 174
|
quoto "cionci", inoltre se hai solo dei puntatori agli degli oggetti puoi utilizzare la "Forward declaration" nell'header ed includere il file direttamente nel cpp.
![]() Ultima modifica di giangian2 : 19-12-2006 alle 13:02. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
domanda idiota ?
![]() l'avessero fatta quegli idi.... della soc. Repl... che avevano in mano parte del progetto xxx e ci consegnarono il pacchetto SENZA 1 (UNO) #ifndef ... ![]() era tutto un incastro perfetto di #include in modo da non includere piú volte lo stesso header ![]() Bastó una modifica per far crollare il tutto ![]() Quindi Tommo, se non sai una cosa e chiedi consiglio non é mai una domanda idiota. PS: oltre a fopen e malloc senza check ... "bisogna fidarsi del sistema operativo" fu la giustificazione ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Grazie per le risposte, mi fa piacere che nn era una domanda tanto idiota allora...
cmq l'header di object.cpp aveva già la parte con #ifndef: Codice:
#ifndef _OBJECT_H_ #define _OBJECT_H_ #if _MSC_VER > 1000 #pragma once #endif .... #endif ![]() Cioè ho incluso object.h dentro weapon.h, incluso a sua volta in player.h che ho incluso in objectmanager.h... certo nn era una bella soluzione, specie perchè alle classi del player nn serve a nulla weapon... Ora proverò con le fw declaration includendo object.h direttamente nel cpp... P.S. Che cosa fa "#if _MSC_VER > 1000 #pragma once"? L'ho messo perchè l'ho copiato da un header trovato su internet, ma nn so quanto sia utile... |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Ma il #ifndef dovrebbe bastare ... sicuro di averlo scritto giusto ? EDIT: scusa, poco chiaro: #pragma once é la direttiva. #if _MSC_VER > 1000 é una if per il preprocessore ma nel tuo caso secondo me non serve. Se non hai definito _MSC_VER > 1000 non ha senso
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#7 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#9 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
boh ora lo include una sola volta come dovrebbe... visto che funziona lo lascio così com'è.
_MSC_VER potrebbe essere definito da qualche parte nel codice di OGRE3D, visto che il codice l'ho preso da un header per quello... |
![]() |
![]() |
![]() |
#11 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
E io che uso codeblocks che me ne faccio?
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() ( ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() capisco usarlo durante la progettazione, durante i test ... ![]() ![]() mai visto nel codice della Borland ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#16 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Codice:
#if _MSC_VER > 1000 #pragma once #endif ![]() |
|
![]() |
![]() |
![]() |
#17 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
a proposito
![]() Quote:
|
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() Se il precomp non li capisce li ignora. Quindi basterebbe scrivere #pragma once se lo capisce bene sennó sticazzi ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:24.