Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-12-2006, 17:18   #1
Tommo
Senior Member
 
L'Avatar di Tommo
 
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 -
Tutti gli header contengono solo definizioni delle funzioni in un *.cpp.

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... ma a quelli la definizione di object serve... come serve quella di weapon e Player a ObjectManager... BOH!

Spero che qualcuno abbia capito cosa ho cercato di comunicarvi visto che sta roba nn è chiara nemmeno a me ... grazie in anticipo... e nn esitate a chiedere spiegazioni...
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 00:00   #2
cionci
Senior Member
 
L'Avatar di cionci
 
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__
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 11:54   #3
giangian2
Member
 
L'Avatar di giangian2
 
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 14:02.
giangian2 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 13:36   #4
trallallero
Senior Member
 
L'Avatar di trallallero
 
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 16:01   #5
Tommo
Senior Member
 
L'Avatar di Tommo
 
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
ma per qualche motivo nn ha funzionato, e allora avevo temporaneamente risolto con una forward declaration e un "incastro" di headers ...
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...
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 16:11   #6
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Tommo
Grazie]
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...
é una direttiva per il preprocessore e serve proprio a far includere solo una volta il sorgente.
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 16:33   #7
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da trallallero
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
con un sistema di packaging come quello di Java non avresti avuto il problema
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 16:56   #8
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da 71104
con un sistema di packaging come quello di Java non avresti avuto il problema
java ... linguaggio per fighette
__________________
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 17:04   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da trallallero
java ... linguaggio per fighette
le fighette non hanno problemi di inclusione multipla... o si??
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 18:47   #10
Tommo
Senior Member
 
L'Avatar di Tommo
 
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...
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 19:19   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Tommo
_MSC_VER potrebbe essere definito da qualche parte nel codice di OGRE3D, visto che il codice l'ho preso da un header per quello...
ti rovino il finale: è definita implicitamente dal compilatore Microsoft.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 21:08   #12
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
E io che uso codeblocks che me ne faccio?
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 21:31   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Tommo
E io che uso codeblocks che me ne faccio?
Niente...viene ignorato, a meno che non usi il compilatore MS con Code::Blocks...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2006, 08:59   #14
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da 71104
le fighette non hanno problemi di inclusione multipla... o si??
che volgare

( )
__________________
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2006, 09:05   #15
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da 71104
ti rovino il finale: è definita implicitamente dal compilatore Microsoft.
addirittura definito dal compilatore
capisco usarlo durante la progettazione, durante i test ...

giusto una ciofeca come la MS ha bisogno di un pragma del genere per controllare le proprie porcate

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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2006, 15:52   #16
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da trallallero
addirittura definito dal compilatore
capisco usarlo durante la progettazione, durante i test ...

giusto una ciofeca come la MS ha bisogno di un pragma del genere per controllare le proprie porcate
macchè, utilissima invece: ti permette di utilizzare o meno una certa feature del compilatore a seconda che questo la supporti o meno. _MSC_VER significa Microsoft Compiler Version. il codice
Codice:
#if _MSC_VER > 1000
#pragma once
#endif
significa esattamente: "se _MSC_VER è definita (stai compilando col compilatore Microsoft) ed è definita come > 1000 (il compilatore Microsoft con cui stai compilando supporta pragma once) allora usa pragma once", che è una comoda direttiva che serve precisamente a proteggere dall'inclusione multipla.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2006, 15:56   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
a proposito
Quote:
Originariamente inviato da trallallero
addirittura definito dal compilatore
non è neanche l'unica: lo stesso standard ANSI C stabilisce che il compilatore debba anche definire alcune macro (presenti infatti anche in gcc) come __FILE__, __LINE__, e qualcun'altra molto utile in fase di debug. MFC usa tali macro nei suoi ottimi strumenti di diagnostica (macro ASSERT, VERIFY, TRACE, e compagnia bella) permettendoti così per esempio di sapere precisamente a quale linea di quale file sorgente si è asserito.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2006, 16:06   #18
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da 71104
macchè, utilissima invece: ti permette di utilizzare o meno una certa feature del compilatore a seconda che questo la supporti o meno. _MSC_VER significa Microsoft Compiler Version. il codice
Codice:
#if _MSC_VER > 1000
#pragma once
#endif
significa esattamente: "se _MSC_VER è definita (stai compilando col compilatore Microsoft) ed è definita come > 1000 (il compilatore Microsoft con cui stai compilando supporta pragma once) allora usa pragma once", che è una comoda direttiva che serve precisamente a proteggere dall'inclusione multipla.
forse quelli della MS non sanno che i pragma sono come gli HINT di Oracle ovvero "consigli".
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
Elon Musk conferma la fine del Cybertruc...
CrowdStrike acquisisce Fiddler: nasce Fa...
QNAP ES2486AFdc, storage all-flash e sup...
GTA 6, il preload svela i dettagli tecni...
OPPO non si ferma: ufficializzato l'arri...
No, questo non è il nuovo Registro di si...
Ritardi nell'Entry/Exit System europeo, ...
CMF Speaker S: piccolo, originale e con ...
Red Hat mette gli agenti IA al lavoro su...
Claude può sognare: l’IA di Anthropic ri...
Xiaomi Pad 7 12GB/256GB a 324,96€ su Ali...
Fox chiude l'acquisizione di Roku da 22 ...
Recensione vivo X Fold6: quando smartpho...
Xiaomi attacca l'Europa: proseguono i pr...
Toshiba Canvio Basics da 4TB a soli 81€ ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:50.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v