Я пытаюсь создать объект класса с именем Cell и сохранить его в связанном списке.Я уверен, что мог бы сделать это с массивом, но часть моего назначения состоит в том, что я использую связанный список, и я не думал, что получу столько проблем.В настоящее время это мой узел.Прямо сейчас у меня есть все эти переменные, хранящиеся в узле, но я бы предпочел создать объект (называемый «Ячейка») для их хранения.Информация должна быть указателем на объект типа T. Прямо сейчас это T должно иметь тип Cell.
template<class T>
struct Node {
T *info;
Node<T> *nodeP;
Node<T> *linkP;
int nodeNumber = 0;
bool purchased = false;
std::string color = " ";
int index = 0;
int max_num = 0;
std::string name = " ";
int price;
};
Здесь я создаю узел и добавляю его в связанный список.В данный момент я просто заполняю значения узла, но пытаюсь создать объект типа Cell и присвоить его адрес информации указателя.Я пробовал несколько разных способов, но продолжаю возвращаться с ошибками.Я закомментировал их, чтобы вы могли увидеть, что я пробовал.
template<class T>
void Board<T>::setCellValue() {
//open file
ifstream inFile;
string line;
inFile.open("CellValues.txt");
//Check for Error
if (inFile.fail()) {
cerr << "File does not exist!";
exit(1);
}
int index = 0, max_num = 0, count = 0, price = 0;
string color, name;
istringstream inStream;
while (getline(inFile, line)) {
inStream.clear();
inStream.str(line);
inStream >> color >> index >> max_num >> name >> price;
//creates node
Node<T> *newNodeP = new Node<T>;
//create pointer, assign pointer to pointer in Node
//Cell<T> *cellPtr = new Cell<T>(count, name, color, index, max_num, price);
//newNode->info= cellPtr;
//creating anonymous object and assigning to the node? I think
newNodeP->info = new Cell<T>(color, index, max_num, name, price);
//weird way I was just experimenting with
newNodeP->info->Cell<T>(count, name, color, index, max_num, price);
//fills node values(this is what I want to handle in the object
newNodeP->color = color;
newNodeP->index = index;
newNodeP->max_num = max_num;
newNodeP->name = name;
newNodeP->nodeNumber += count;
newNodeP->price = price;
newNodeP->linkP = NULL;
if (firstP != NULL)
lastP->linkP = newNodeP;
else
firstP = newNodeP;
lastP = newNodeP;
count++;
}
}
В настоящее время у меня есть два способа вернуть приземленный узел.Один возвращает Node * и вроде работает.Он возвращает указатель на узел, и я могу получить доступ к значениям внутри этого узла, но я не могу понять, как сохранить указатель на этот узел.
//Find Cell
template<class T>
Node<T>* Board<T>::findCell(int id) {
for (Node<T> *traverseP = firstP; traverseP != NULL; traverseP = traverseP->linkP) {
if (traverseP->nodeNumber == id) {
return traverseP;
}
}
return nullptr;
}
//how I call it in main. it returns an address to that node, but I'm getting errors trying to store that address in a pointer.
cout << "You landed on cell " << gameBoard.findCell(player.getCellNum()) << endl << endl;
Node<T> *ptr = gameboard.findCell(player.getCellNum())->info;
Этот второй способ, я думаю, возвращаетссылка на объект в узле, но моя более ранняя проблема не дает мне понять это.
//Return Cell
template <class T>
T Board<T>::returnCell(int id) {
for (Node<T> *traverseP = firstP; traverseP != NULL; traverseP = traverseP->linkP) {
if (traverseP->nodeNumber == id) {
return traverseP->info;
}
}
return nullptr;
}
//How i'm calling it in main. I don't really know what it's returning though because it only prints "You landed on " and then nothing else.
cout << "You landed on " << gameBoard.returnCell(player.getCellNum()) << endl;