Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-12-2007, 01: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, 11: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, 11: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, 11: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, 11: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, 17: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, 17: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, 17: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, 17: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, 17: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, 17: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, 17: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


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
La Corea del Sud si mette nelle mani di ...
Addio console: Just Dance Now trasforma ...
Driver Radeon Adrenalin 25.10: perch&egr...
Oltre le GPU: NVIDIA annuncia NVQLink, ...
Samsung lancia il Team Galaxy Italia per...
Magic Leap: indistinguibili dai normali ...
Aruba Cloud: trasparenza sui costi e str...
Quando il cloud si blocca e resti al fre...
Integrare per competere, la sfida digita...
Leggenda del rally e modernità: S...
La Python Software Foundation rinuncia a...
Full HD e QLED, è in offerta un TV da 32...
Honda ha rilasciato un nuovo video sul p...
Resident Evil Requiem: arriva su Switch ...
Marshall Acton III in promo su Amazon in...
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: 08:24.


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