0

私は基本的に、リーグ、サッカー チーム、備品を追加できるデータベース構造を構築しています。リンク リスト テンプレートを作成し、各チームのフィクスチャのリンク リストと、各リーグのチームのリンク リストを作成しました。dataBaseクラス内のリーグのリンクリストもあります。データベースにリーグを追加する機能を追加できましたが、チームを追加できません。add 関数を実行したところ、正しい値が割り当てられましたが、関数から戻るteam_listと、指定されたリーグのリンク リストが空です。

addTeamこれがデータベース内の私の関数です。

void Database::addTeam(Team team)
{
    Node<League>* ptr = league_list.getHead();

    while(ptr!=0)
    {
        // if the team's league matches current in the list add to this league
        if(ptr->getData().getLeagueName()==team.getLeagueName())
        {
            ptr->getData().getTeamList().add(team);
            return;
        }
        else // doesn't match so go to next league in list
        {
            ptr=ptr->getNextNode();
        }
    }
    if(ptr==NULL) // if not found prompt user
    {
        throw exception(ERRORMSG);
    }
}

リンクされたリスト内の追加機能は次のとおりです。デバッガーをステップ実行すると、意図した値が変更および変更されているように見えます。addTeamただし、この関数からデータベースの関数に戻ると、何も変更されていません。

template<class data>
void LinkedList<data>::add(data a)
{
    Node<data> *nodePtr;
    nodePtr=new Node<data>(a);

    nodePtr->setNextPointer(0);

    if(head==0) // if head is empty
    {
        head=nodePtr; // make the new node the first node
        head->setPreviousPointer(0); // make the new node point to null
    }

    else
    {
        if(nodePtr==0) // if head is null
        {
            last=0; // if list unoccupied _last is null
        }
        while(nodePtr->getNextNode()!=0)
        {
            last=nodePtr->getNextNode();
        }
        nodePtr->setPreviousPointer(last);
        // set the old last node to point to the new node
        last->setNextPointer(nodePtr);
    }

    last=nodePtr;       // point to the new end of list
    current=nodePtr;    // set the current node to the last in list
}

なぜこれが起こるのかについての助けに本当に感謝しています。

4

1 に答える 1

0

addTeam関数にはいくつかの問題があります。

template<class data>
void LinkedList<data>::add(data a)
{
    Node<data> *nodePtr;
    nodePtr=new Node<data>(a);

    // this should not be necessary, do that in the constructor of Node
    nodePtr->setNextPointer(0);

    if(head==0) // if head is empty
    {
        head=nodePtr; // make the new node the first node
        // this is not necessary, nodePtr already has been set up above
        // not to have a next node
        // head->setPreviousPointer(0); // make the new node point to null
    }
    else
    {
        // this check will never fail; what do you want to check here?
        if(nodePtr==0) // if head is null
        {
            last=0; // if list unoccupied _last is null
        }

        // this loop will never run
        /*
        while(nodePtr->getNextNode()!=0)
        {
            last=nodePtr->getNextNode();
        }
        */
        // either you have stored a Node<data>* last as member of LinkedList
        // or you need something like
        Node<data>* last = head;
        while(last->getNextNode() != 0)
        {
            last = last->getNextNode();
        }

        nodePtr->setPreviousPointer(last);
        // set the old last node to point to the new node
        last->setNextPointer(nodePtr);
    }

    last=nodePtr;       // point to the new end of list
    current=nodePtr;    // set the current node to the last in list
}
于 2013-06-10T01:12:29.240 に答える