Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-12-2007, 00:08   #1
Broadband
Member
 
Iscritto dal: Jul 2005
Messaggi: 156
[c++] Chiaramenti sugli header (codice allegato)

Ragazzi sto facendo (ci provo anche) un mio gioco di ruolo testuale e ho qualche difficoltà con gli header. Per ora ho realizzato solo qualche classe e prima di andare avanti vorrei testarle ma non ci riesco per vari errori sulle inclusioni. Preciso che sto seguendo una guida trovata sul Web. Ho fatto anche varie ricerche sul forum ma non ho trovato nessun post abbastanza completo... dato che sto facendo questo lavoro anche per esercitarmi vorrei capire precisamente le cose

Ho creato la classe Item da cui derivano due classi Weapon e Armor. Per non allungare troppo posterò solo Weapon che tanto è praticamente uguale a Armor.

Item.h
Codice:
#ifndef ITEM_H
#define ITEM_H
class Item {

private:

	char name[ 32 ];
	int price;

public:

	Item();
	void SetName(char* );
	char* Getname();
	void SetPrice(int newprice);
	int GetPrice();
};
#endif
Weapon.h
Codice:
#ifndef WEAPON_H
#define WEAPON_H
#include "Item.h"

class Weapon : public Item{

private:

	int damage;

public:

	Weapon();
	void CreateWeapon( char*, int, int );
	void SetDamage(int);
	int GetDamage();
	
};
#endif
Ecco i cpp:

Item.cpp
Codice:
#include <string>
#include "Item.h"

Item::Item()
{
	SetName("Nome non ancora specidicato");
	SetPrice(0);
}

void Item::SetName(char* newname)
{
	strcpy(name,newname);
}

void Item::SetPrice(int newprice)
{
	price=newprice;
}

char* Item::Getname()
{
	return name;
}

int Item::GetPrice()
{
	return price;
}

Weapon.cpp
Codice:
#include "Weapon.h"

Weapon::Weapon()
:Item()
{SetDamage(0);}

void Weapon::CreateWeapon(char* newname, int p, int dmg)
{
	SetName(newname);   
	SetPrice(p);		
	SetDamage(dmg);
}

void Weapon::SetDamage(int dmg)
{
	damage=dmg;
}

int Weapon::GetDamage()
{
	return damage;
}
Ora vi posto il main. Questo probabilmente è piendo di errori che io non vedo.... l' idea è di fare un main che chiami una funzione bool Start() che dovrebbe in futuro contenere il loop principale del gioco ma che adesso è solo di test.

main.cpp
Codice:
#include <iostream>
#include "Item.h"
#include "Weapon.h"
using namespace std;

// PROTOTYPES
bool Start();


void main(){
	
       //variabili globali
       bool RFCComplete=false;

	cout<<"Welcome to my first (and last) text based game!\n";
	cout<<"coded by JJ\n\n";
	cout<<"Press Enter to continue...\n";
	cin.get();

	Start();

}
E cosa che non so se è lecita ho messo la funzione start() in un file Start.cpp

Start.cpp
Codice:
bool Start()
{
       return true; //test
}
Quando compilo ottengo: "item.cpp(13) : error C3861: 'strcpy': identificatore non trovato". Su c++ reference ho visto che per usare questa funzione devo icludere string:
  1. Dove lo includo, in che file?
Ci ho messo 1 ora a fare 'sto post Spero qualcuno di buon cuore lo legga. Ha senso inoltre fare un header file (i.e. Library.h) che includa tutti i .h e includere Library.h in ogni file?

Ciao e grazie e scusatemi la lunghezza eccessiva!
Broadband è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 10:12   #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
Per l'ultima domanda: non ha senso perché non è detto che tu li debba usare tutti allo stesso momento. Devi includere solo gli header che ti servono.
Se la tua applicazione è strutturata bene saranno pochi in ogni .cpp o .h.

Va bene la struttura che hai dato. Usa le liste di inizializzazione. Usa la classe string al posto delle stringhe alla C.
strcpy è dichiarata in string.h, ma in C++ l'header diventa <cstring>.

Start dichiarala in un .h e definiscila in un .cpp ed aggiungi il .h al main. In alternativa, che fa molto più OOP, crea una classe Game che ha un metodo chiamato start.
Così nel main il tutto diventa:

Game game;
gam.start();
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 10:23   #3
Broadband
Member
 
Iscritto dal: Jul 2005
Messaggi: 156
Quote:
Originariamente inviato da cionci Guarda i messaggi
Per l'ultima domanda: non ha senso perché non è detto che tu li debba usare tutti allo stesso momento. Devi includere solo gli header che ti servono.
Se la tua applicazione è strutturata bene saranno pochi in ogni .cpp o .h.

Va bene la struttura che hai dato. Usa le liste di inizializzazione. Usa la classe string al posto delle stringhe alla C.
strcpy è dichiarata in string.h, ma in C++ l'header diventa <cstring>.

Start dichiarala in un .h e definiscila in un .cpp ed aggiungi il .h al main. In alternativa, che fa molto più OOP, crea una classe Game che ha un metodo chiamato start.
Così nel main il tutto diventa:

Game game;
gam.start();
Caro Cionci grazie per avermi risposto.
Avevo pensato di usare la classe string ma tieni presente che tutto ciò è per esercitazione quindi credo che più cose faccio "a mano" meglio è quindi per ora mi va bene come ho gestito le stringhe. Comunque alla fine ho incluso <string> in Item.cpp che è dove uso strcopy e non ho avuto problemi.

Per ora ho fatto un test con questo main.cpp e tutto pare funzionare. La funzione Start() l' ho messa appena dopo il main per non dover fare altre inclusione ma credo sia impensabile mettere tutte le funzioni dopo il main uno volta che ne avrò molte.

Codice:
#include <iostream>
using namespace std;
#include "Weapon.h"

	//Prototypes
	bool Start(Weapon*);

	bool RFCComplete=false;

void main(){
	
    //variabili globali
    
	
	cout<<"Welcome to my first text based game!\n";
	cout<<"coded by JJ\n\n";
	cout<<"Press Enter to continue...\n";
	cin.get();
	
	Weapon weap;
	Weapon* wptr=&weap;

	Start(&weap);
}

bool Start(Weapon* w){
	
	cout<<w->GetName()<<endl;
	cout<<w->GetPrice()<<endl;
	cout<<(*w).GetDamage()<<endl;
	cout<<RFCComplete;
	return true;
}
Comunque ora faccio come dici tu e mi creo la classe Game.

Però una cosa... se avessi messo la mia funzione in Start.cpp e non dopo il main come ho fatto, le variabili globali e i prototipi le avrei dovute dichiarare in Start.cpp o vanno bene dove sono adesso?

Sei gentilissimo
Broadband è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 10:31   #4
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
Quelle nel main non sono variabili globali...quelle le devi mettere al di fuori del main e devono essere dichiarate come extern (sempre al di fuori di qualsiasi funzione) negli altri .cpp.
In ogni caso in C++ non si usano le variabili globali...sono il male

Io ti consiglio di utilizzare la classe string, dopo tutto stai programmando in C++ e non in C, quindi è bene che tu impari ad usare le stringhe del C++ e non quelle del C.
Poi è davvero da masochisti fare un gioco testuale usando le stringhe del C quando hai a disposizione quelle del C++. Se io dovessi fare un gioco testuale in C, la prima cosa che mi farei sarebbe una nuova struttura per gestire le stringhe dinamiche in maniera del tutto simile alla class string del C++ (oggetti a parte chiaramente)
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 10:41   #5
Broadband
Member
 
Iscritto dal: Jul 2005
Messaggi: 156
ok mi studio le stringhe Tanto ormai char* l'ho capito.
Broadband è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 16:17   #6
Broadband
Member
 
Iscritto dal: Jul 2005
Messaggi: 156
Sto facendo qualcosa di scemo con le stringhe per provare....

Codice:
#include <string>
#include <iostream>


void main()
{
	string str1("ciao");
	cout<<str1;

}
Mi sapete dire perchè non compila?
error C2065: 'string': identificatore non dichiarato
Come se non avessi incluso string
Grazie
Broadband è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 16:22   #7
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
O metti:

std::string str1("ciao");

o metti dopo gli include:

using std::string;

o

using namespace std;

per importare tutto il namespace.

In teoria l'errore avrebbe dovuto dartelo anche su cout.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 16:26   #8
Broadband
Member
 
Iscritto dal: Jul 2005
Messaggi: 156
per bacco non pensavo servisse anche per string!
Grazie come al solito!
Broadband è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 16:30   #9
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 Broadband Guarda i messaggi
per bacco non pensavo servisse anche per string!
Grazie come al solito!
Serve per tutta la libreria standard.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 16:36   #10
Broadband
Member
 
Iscritto dal: Jul 2005
Messaggi: 156
Hmmm perchè non compila anche se ho incluso tutto lo spazio dei nomi?
Codice:
#include <string.h>
#include <iostream>
using namespace std;

void main()
{
	string str1="ciao";
	cout << str1;
	
}
---->main.cpp(8) : error C2679: '<<' binario: non è stato trovato alcun operatore che accetti un operando destro di tipo 'std::string'. È anche possibile che non vi siano conversioni accettabili.
Broadband è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 16:36   #11
Broadband
Member
 
Iscritto dal: Jul 2005
Messaggi: 156
Scusatemi ho capito da solo
Broadband è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2007, 16:39   #12
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
Già
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
The Social Reckoning: il seguito di The ...
iPhone 16 si trova ora su Amazon a soli ...
Amazon fa a pezzi i prezzi dei monitor g...
Componenti hardware e periferiche PC a p...
Pianeta in crisi: 7 su 9 limiti vitali g...
Galaxy S25 FE con taglio di prezzo di 10...
4 robot aspirapolvere e 3 scope elettric...
Nuovissimi Xiaomi 15T e 15T Pro con tagl...
Le agenzie federali americane potranno u...
Smartphone pieghevoli sempre più ...
LG svela le Easy TV, una nuova gamma di ...
L'equipaggio della missione Shenzhou-20 ...
Possibili detriti spaziali del razzo cin...
Amazon distrugge i prezzi: TV OLED LG, i...
Trump studia dazi fino al 100% per sping...
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: 16:12.


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