Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-07-2013, 12:24   #1
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
Vector inizializzato nel costruttore risulta vuoto subito dopo.

Questa è la classe dichiarata nel .h:
Codice:
class TOH_Node
{

public:
	
	//a tower is represented by a stack of integers
	typedef std::stack<int> Tower;
	
private:

	...variabili e metodi omessi...
	
	//the three towers representing this state
	std::vector<Tower> towers;

public:
	
	//--------CTORS
	
	TOH_Node()
	{
		towers.push_back(Tower());
		towers.push_back(Tower());
		towers.push_back(Tower());
	}

	TOH_Node(bool p_IsInitialNode) : bIsInitialNode(p_IsInitialNode){TOH_Node();SetInitialState();}
	
	~TOH_Node(){}

	//------------

	...metodi omessi...
};
Nel costruttore con parametro richiamo il costruttore di base e poi la SetInitialState(). Vengono richiamati correttamente, ho verificato con dei cout. Inoltre con un breakpoint nel costruttore senza parametro ho visto che 'towers' ha size 3 dopo i push_back.
Il problema è che poi richiama la SetInitialState che mi fa dei push. Ad esempio:

Codice:
towers[towerIndex].push(3);
e mi crasha perchè dice che l'indice che uso sul vector è andato out of range. towerIndex vale 0 quando il programma crasha, ma il problema non è lui, il problema è che towers ha size 0 dentro la funzione che richiamo.
L'ordine di esecuzione delle operazioni è corretto e l'ho controllato facendo debug, prima inizializza il vettore towers, poi richiama il metodo per ci mette dentro i valori.
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2013, 14:05   #2
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
Ho notato che il problema si presenta solo se inizializzo un oggetto della classe TOH_Node con il costruttore con parametro, se lo inizializzo con il costruttore base non ci sono problemi.
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2013, 14:08   #3
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da -Ivan- Guarda i messaggi
Questa è la classe dichiarata nel .h:
Codice:
class TOH_Node
{

public:
	
	//a tower is represented by a stack of integers
	typedef std::stack<int> Tower;
	
private:

	...variabili e metodi omessi...
	
	//the three towers representing this state
	std::vector<Tower> towers;

public:
	
	//--------CTORS
	
	TOH_Node()
	{
		towers.push_back(Tower());
		towers.push_back(Tower());
		towers.push_back(Tower());
	}

	TOH_Node(bool p_IsInitialNode) : bIsInitialNode(p_IsInitialNode){TOH_Node();SetInitialState();}
	
	~TOH_Node(){}

	//------------

	...metodi omessi...
};
Nel costruttore con parametro richiamo il costruttore di base e poi la SetInitialState(). Vengono richiamati correttamente, ho verificato con dei cout. Inoltre con un breakpoint nel costruttore senza parametro ho visto che 'towers' ha size 3 dopo i push_back.
Il problema è che poi richiama la SetInitialState che mi fa dei push. Ad esempio:

Codice:
towers[towerIndex].push(3);
e mi crasha perchè dice che l'indice che uso sul vector è andato out of range. towerIndex vale 0 quando il programma crasha, ma il problema non è lui, il problema è che towers ha size 0 dentro la funzione che richiamo.
L'ordine di esecuzione delle operazioni è corretto e l'ho controllato facendo debug, prima inizializza il vettore towers, poi richiama il metodo per ci mette dentro i valori.
Codice:
TOH_Node(bool p_IsInitialNode) : bIsInitialNode(p_IsInitialNode)
{
    TOH_Node();
    SetInitialState();
}
Errore: stai creando un oggetto anonimo di tipo TOH_Node, non stai invocando il costruttore.
E' come scrivere
Codice:
vector<int>();
Crei un oggetto senza assegnarlo ad alcuna variabile.
Per invocare il costruttore di default, dentro ad un qualsiasi altro costruttore della classe, devi scrivere così:
Codice:
this->TOH_Node::TOH_Node();
Anche senza il this, ma così è più chiaro che stai invocando TOH_Node, nella classe TOH_Node, sull'oggetto corrente.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2013, 14:55   #4
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
Grazie! Ero arrivato a capire che stavo ridichiarando un oggetto con quella chiamata ma non sapevo come e se si potesse richiamare il costruttore di base.
Adesso funziona .
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2013, 18:19   #5
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
Ho un altro problema ma non volevo aprire un thread a parte perchè probabilmente è una stupidaggine quindi provo a scrivere qua.

Voglio fare overload dell'operatore == per gli oggetti della classe che ho definito nel primo post.
Voglio che l'overload sia nei due casi:
chiamo == tra due copie di variabili di quel tipo oppure chiamo == tra due puntatori a variabili di quel tipo.

Quello che ho fatto è:

Codice:
//operator overloading (passing value)
bool operator==(TOH_Node node);

//operator overloading (passing pointer)
bool operator==(TOH_Node *node);
Mentre il primo funziona, per esempio if( *node1 == *node2 ) mi richiama il primo overload operator==(TOH_Node node), il secondo no.
Io pensavo (evidentemente malissimo) che richiamando if( node1 == node2 ) mi dovesse richiamare il secondo overload che ho fatto.

Ho provato a cambiare diverse cose sia nella chiamata che nella definizione del metodo ma non ho trovato nemmeno un modo perchè lo richiami.
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2013, 19:30   #6
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da -Ivan- Guarda i messaggi
Ho un altro problema ma non volevo aprire un thread a parte perchè probabilmente è una stupidaggine quindi provo a scrivere qua.

Voglio fare overload dell'operatore == per gli oggetti della classe che ho definito nel primo post.
Voglio che l'overload sia nei due casi:
chiamo == tra due copie di variabili di quel tipo oppure chiamo == tra due puntatori a variabili di quel tipo.

Quello che ho fatto è:

Codice:
//operator overloading (passing value)
bool operator==(TOH_Node node);

//operator overloading (passing pointer)
bool operator==(TOH_Node *node);
Mentre il primo funziona, per esempio if( *node1 == *node2 ) mi richiama il primo overload operator==(TOH_Node node), il secondo no.
Io pensavo (evidentemente malissimo) che richiamando if( node1 == node2 ) mi dovesse richiamare il secondo overload che ho fatto.

Ho provato a cambiare diverse cose sia nella chiamata che nella definizione del metodo ma non ho trovato nemmeno un modo perchè lo richiami.
operator== è un operatore binario, ma nella lista parametri gli passi un solo argomento. Secondo te l'altro quale potrebbe essere?
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2013, 21:14   #7
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
operator== è un operatore binario, ma nella lista parametri gli passi un solo argomento. Secondo te l'altro quale potrebbe essere?
Nuooooooooooooooooo...

questo funziona:
Codice:
if( *node1 == node2 )
Non so perchè mi ero convinto di dover cambiare anche la prima variabile .
Però comunque non capisco se esista il modo per poter fare override di == in modo che richiami la mia funzione quando confronto:
if( node1 == node2 )
questo non sono riuscito a farlo.
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2013, 21:46   #8
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da -Ivan- Guarda i messaggi
Nuooooooooooooooooo...

questo funziona:
Codice:
if( *node1 == node2 )
Non so perchè mi ero convinto di dover cambiare anche la prima variabile .
Però comunque non capisco se esista il modo per poter fare override di == in modo che richiami la mia funzione quando confronto:
if( node1 == node2 )
questo non sono riuscito a farlo.
Semplicemente, non deve essere una funzione membro
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Qualcomm HBC supera la validazione in la...
Tachyum avvia la procedura di fallimento...
La sonda spaziale NASA Lucy ha raggiunto...
Le GeForce RTX 5000 scarseggiano, tornan...
Raspberry Pi 5, il prezzo è ormai...
I frigoriferi dei supermercati diventano...
Le vecchie fotocamere digitali compatte ...
La Cina potrebbe rinviare il ritorno del...
Verizon non è preoccupata della c...
RDNA 5 sulle APU AMD, ma non per tutti: ...
Marvell acquisisce Lumentum per 115 mili...
La febbre dei data center fa impennare i...
ECOVACS T90S OMNI crolla a 499€ su Amazo...
In Cina i camion elettrici hanno gi&agra...
Attacchi hacker ai supermercati in Europ...
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: 04:07.


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