Vous essayez de comprendre pourquoi mes pointeurs de classe list()
sont remplacés par le troisième nœud. Ce qui se passe dans la fonction d'insertion (ci-dessous) est que la troisième fois que la fonction d'insertion est appelée, mon pointeur de nœud headByName->nextByName
est écrasé par le troisième nœud, alors qu'il devrait pointer vers le second. Donc, comme vous pouvez le deviner, le 4ème nœud est écrasé par le 5ème et le 6ème nœud est écrasé par le 7ème, d'où le "saut" dans les nœuds.LinkedList "node jump"
Les attributs de l'objet cave sont passés à travers la cave cteur puis à la fonction list::insert
par ces appels dans les principaux:
//main.cpp
//the attributes of the winery object are the paramaters, name, location, acres, rating:
list *listPtr = new list();
wineries->insert(winery("Lopez Island Vinyard", "San Juan Islands", 7, 95));
wineries->insert(winery("Gallo", "Napa Valley", 200, 25));
wineries->insert(winery("Cooper Mountain", "Willamette Valley", 100, 47));
Ensuite, la cave cteur est appelée où j'affecter le memembers pointeur privé:
//winery.cpp
winery::winery(const char * const name, const char * const location, const int acres, const int rating)
: m_acres(acres), m_rating(rating)
{
if (name)
{
size_t len = strlen(name) +1;
m_name = new char[len];
strcpy_s(m_name, len, name);
}
else
m_name = NULL;
if (location)
{
size_t len = strlen(location) +1;
m_location = new char[len];
strcpy_s(m_location, len, location);
}
else
m_location = NULL;
}
Et puis au problème en cours: Si vous pouvez imaginer que cette fonction a déjà été appelée deux fois, current_node aura le thrid win. headByName
aura le premier noeud et dans celui-ci [+], headByName->next
aura le troisième. J'ai besoin de headByName->next
pour avoir le second. Je me demande juste pourquoi il a été écrasé ..
// list.cpp
void list::insert(const winery& winery)
{
node *current_node = new node(winery); // the third wineries info!
node *next_node = NULL;
list *list_ptr = NULL;
do
{
if (headByName == NULL || headByRating == NULL) // then we are here for the first item
{
headByName = current_node; // the list ptrs have a node address.
headByRating = current_node;
}
else
{
next_node = current_node;
// transfer by the next call in main.
headByName->nextByName = next_node;
headByRating->nextByRating = next_node;
}
} while (headByName == NULL || headByRating == NULL);
next_node = NULL;
current_node = NULL;
}
Quelqu'un pourrait trouver mon deuxième noeud? oh ouais, et les pointeurs qui sont disponibles pour moi:
struct node
{
winery item;
node * nextByName;
node * nextByRating;
};
class list
{
...
private:
node * headByName;
node * headByRating;
};
cela pourrait être d'une certaine importance, son corps du nœud cteur:
//list.cpp
list::node::node(const winery &winery) :
nextByName(NULL), nextByRating(NULL), item(winery.getName(),
winery.getLocation(), winery.getAcres(), winery.getRating())
{
// where the item paramters are all pub-mem functions of the winery class.
}