Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
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: 1843
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: 1843
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: 1843
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: 1843
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: 1843
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


Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
AWS rinnova lo stack dell’IA: Trainium3,...
AWS entra nell'era degli agenti: il keyn...
Roscosmos: inventario a bordo della ISS ...
Arduino viene acquisita da Qualcomm e ca...
Un razzo spaziale Arianespace Vega C ha ...
Terra Next dà il via a Scale-Up P...
Il veicolo riutilizzabile ESA Space Ride...
Un Mousepad per mirare meglio: uno youtu...
Tokyo Electron sotto accusa: Taiwan cont...
L'ESA sta cercando alternative all'utili...
iliad TOP 250 PLUS e TOP 300 PLUS: valan...
FRITZ! a Sicurezza 2025: connessioni WiF...
I 18enni di oggi non fanno più la...
Super offerte Apple: iPhone 16e a 529€ e...
Torres EVT arriva in Italia con listino ...
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: 07:14.


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