将对象的地址存储在节点内

时间:2018-11-22 14:31:10

标签: c++ object linked-list return-type

我正在尝试创建一个名为Cell的类的对象,并将其存储在链接列表中。我确定我可以使用数组来完成此操作,但是我的部分分配任务是使用链接列表,但我认为我不会遇到这么多问题。目前这是我的节点。现在,我将所有这些变量存储在节点中,但是我宁愿创建一个对象(称为“ 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;

0 个答案:

没有答案