未定义引用另一个类?

时间:2017-03-04 04:37:15

标签: c++ data-structures linked-list nodes

我正在课堂上使用课程而且我遇到错误,我认为这是一个链接问题。我得到“未定义的引用'Node :: setlink()','Node :: getlink()'等等。这是我在linked_list.cpp中使用的所有节点函数都是问题。

例如,linked_list.cpp :(。text + 0x9de):未定义引用 `节点:: getlink()'

Linked_list.cpp

#include "linked_list.hpp"
#include "node.hpp"
#include <iomanip>
#include <iostream>
using namespace std;
//default constructor
Linked_list::Linked_list(void)
{
    head = new Node();
    tail = new Node();
    head->setlink(NULL);
    tail->setlink(NULL);
    cnt = 0;    
}

//constructor
Linked_list::Linked_list(data x)
{
    head = new Node();
    tail = new Node();
    Node *newnode = new Node(x);
    head->setlink(newnode);
    newnode->setlink(tail); 
    cnt++;      
}

//class function
void Linked_list::insert_node(data x)
{
    Node *newNode = new Node(x);
    Node *prev = new Node();
    Node *curr = new Node();

if (head == NULL)
{

    newNode->setlink(tail);
    head->setlink(newNode); 
}
else if (head != NULL)
{
    prev->setlink(head);
    curr->setlink(head->getlink());
while(curr->getlink() != NULL || newNode->getupc() <= curr->getupc())
{
    prev->setlink(curr);
    curr->setlink(curr->getlink());
}
    prev->setlink(newNode);
    newNode->setlink(curr);
}
    cnt++;
}
//Class function
void Linked_list::delete_node(int u)
{
    char choice;
    data temp;
    Node *newNode = new Node();
    Node *prev = new Node();
    Node *curr = new Node();
if (head == NULL)
{
    delete newNode;
    delete prev;
    delete curr;
}
else if (head != NULL)
{
    prev->setlink(head);
    curr->setlink(head->getlink());
while (curr->getlink() != NULL || curr->getupc() != u )
{
    prev->setlink(curr);
    curr->setlink(curr->getlink());
}
    temp = curr->get_structure();
    cout << temp.UPC << setw(15) << temp.desc << setw(15) << "$" << temp.cost << setw(15) << "Aisle: " << temp.aisle << endl;
    prev->setlink(curr->getlink());
    cout << "Are you sure you want to delete?\n";
    cin >> choice;
if (choice == 'y' || choice == 'Y')
{
    delete curr;
    cnt--;
}
else
{
    choice = 'n';
}
}
}

//Class function
void Linked_list::traverse()
{
    data temp;
    Node *curr = new Node();
if (head == NULL)
{
    delete curr;    
    cout << "The list is empty!\n";     
}
else
{
    curr->setlink(head->getlink());
while(curr->getlink() != NULL)
{
    temp = curr->get_structure();
    cout << temp.UPC << setw(15) << temp.desc << setw(15) << "$" << temp.cost << setw(15) << "Aisle: " << temp.aisle << endl;
}
}
}

void Linked_list::retrieve_node(int u)
{
    data temp;
    Node *x;
    x = new Node();
if (head == NULL)
{
    delete x;   
}   

else if (head != NULL)
{
    x->setlink(head->getlink());

while (x->getlink() != NULL || x->getupc() != u)
{
    x->setlink(x->getlink());
}   
    temp = x->get_structure();
    cout << temp.UPC << setw(15) << temp.desc << setw(15) << "$" << temp.cost << setw(15) << "Aisle: " << temp.aisle << endl;
}
}

void Linked_list::check_empty()
{
if (head != NULL)
{
    cout << "The list is empty.\n";

}   
else
{
    cout << "The list is not empty.\n"; 
}
}

linked_list.hpp

#include "node.hpp"
#ifndef linked_list_hpp
#define linked_list_hpp

class Linked_list
{
    Node *head;
    Node *tail;
    int cnt;
public:
    //default constructor creates empty linked list
    Linked_list(void);

    //Constructor that creates first node with values
    Linked_list(data x);

    //Inserts node at correct spot
    void insert_node(data x);

    //deletes specific node
    void delete_node(int u);

    //goes through whole list and prints out
    void traverse(void);

    //returns specific node
    void retrieve_node(int u);

    //checks if list is empty
    void check_empty();


    return_number();    

};
#endif

node.hpp

#ifndef node_hpp
#define node_hpp
#include "node.hpp"
#include <string>
using namespace std;

struct data
{
    int UPC;
    string desc;    
    int quantity;
    double cost;
    int aisle;  
};

class Node
{
    data item;
    Node *link;

public:
    Node(void);
    Node(data x);
    void setlink(Node *ptr);
    Node* getlink();
    int getupc();
    data get_structure();
    bool compare_item(string i);
    double processdata();
};
#endif

node.cpp

#include "node.hpp"

Node::Node(void)
{
    link = NULL;    
}

Node::Node(data x)
{
    item = x;   
}

void Node::setlink(Node *ptr)
{
    link = ptr;
}

Node* Node::getlink()
{
    return link;    
}

int Node::getupc()
{
    return item.UPC;
}

data Node::get_structure()
{
return item;
}

bool Node::compare_item(string i)
{
if(i==item.desc)
{
    return true;
} 
else
{
    return false;
}
}

double Node::processdata()
{
    return item.cost*item.quantity;
}

主要功能

#include <iostream>
#include "node.cpp"
#include "linked_list.cpp"
using namespace std;

void fromfile(Linked_list &x);
void tofile(Linked_list &x);

int main(void)
{
Linked_list ll;
int x, y;
data a;
do
{
cout << "1.Add a grocery item\n" ;
cout << "2.Delete an item\n";
cout << "3.Retrieve an item\n";  
cout << "4.Traverse the list forwards and print out all of the items\n";
cout << "5. Exit the program.\n";
cin >> x;

switch(x)
{
case 1:
cout << "Enter UPC code\n";
cin >> a.UPC;
cout << "Enter description(name of item)\n";
cin >> a.desc;
cout << "Enter quantity\n";
cin >> a.quantity;
cout << "Enter cost\n";
cin >> a.cost;
cout << "Enter aisle\n";
cin >>a.aisle;
ll.insert_node(a);

case 2:
cout << "Enter UPC of item you'd like to delete.\n";
cin >> y;
ll.delete_node(y);

case 3:
cout << "Enter UPC code.\n";
cin >> y;
ll.retrieve_node(y);

case 4:
ll.traverse();

case 5:
cout << "Bye!\n";

default:
cout << "Wrong choice, try again!\n";   
}   
}while (x != 5);

return 0;
}

请帮助我,这是在2个小时内到期。我想我已经运行了一段时间,并且在代码执行main之后,它只是在它到达linked_list函数后停止创建输出。然后,我之后无法输入任何内容。

唯一没有编译的是linked_list.cpp,我也得到了一个winmain错误。

0 个答案:

没有答案