|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
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...
};
Il problema è che poi richiama la SetInitialState che mi fa dei push. Ad esempio: Codice:
towers[towerIndex].push(3); 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. |
|
|
|
|
|
#2 |
|
Senior Member
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.
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
Codice:
TOH_Node(bool p_IsInitialNode) : bIsInitialNode(p_IsInitialNode)
{
TOH_Node();
SetInitialState();
}
E' come scrivere Codice:
vector<int>(); Per invocare il costruttore di default, dentro ad un qualsiasi altro costruttore della classe, devi scrivere così: Codice:
this->TOH_Node::TOH_Node(); |
|
|
|
|
|
|
#4 |
|
Senior Member
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 |
|
|
|
|
|
#5 |
|
Senior Member
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); 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. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
|
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Quote:
questo funziona: Codice:
if( *node1 == node2 ) .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. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:14.












.








