错误:"对运算符的未定义引用<<(std :: ostream&,Dogs const&)"

时间:2016-12-13 21:35:58

标签: c++ pointers reference

在C ++上,我试图创建一个可以追加整个类的链表。 但是,我总是得到同样的错误:

Undefined reference to operator<<std::ostream&, Dogs const&)

我有3个文件,2个标题和1个CPP。

这就是标题的样子:

LinkedList.h:

// A class template for holding a linked list.
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include <iostream>     // For cout and NULL
using namespace std;

template <class T>
class LinkedList
{
private:
   // Declare a structure for the list
   struct ListNode
   {
      T value;                // The value in this node
      struct ListNode *next;  // To point to the next node
   }; 

   ListNode *head;   // List head pointer

public:
   // Constructor
   LinkedList()
      { head = NULL; }

   // Destructor
   ~LinkedList() {};

   // Linked list operations
   void appendNode(T);
   void displayList() const;
};


//**************************************************
// appendNode appends a node containing the value  *
// pased into newValue, to the end of the list.    *
//**************************************************

template <class T>
void LinkedList<T>::appendNode(T newValue)
{
   ListNode *newNode;  // To point to a new node
   ListNode *nodePtr;  // To move through the list

   // Allocate a new node and store newValue there.
   newNode = new ListNode;
   newNode->value = newValue;
   newNode->next = NULL;

   // If there are no nodes in the list
   // make newNode the first node.
   if (!head)
      head = newNode;
   else  // Otherwise, insert newNode at end.
   {
      // Initialize nodePtr to head of list.
      nodePtr = head;

      // Find the last node in the list.
      while (nodePtr->next)
         nodePtr = nodePtr->next;

      // Insert newNode as the last node.
      nodePtr->next = newNode;
   }
}

//**************************************************
// displayList shows the value                     *
// stored in each node of the linked list          *
// pointed to by head.                             *
//**************************************************

template <class T>
void LinkedList<T>::displayList() const
{
   ListNode *nodePtr;  // To move through the list

   // Position nodePtr at the head of the list.
   nodePtr = head;

   // While nodePtr points to a node, traverse
   // the list.
   while (nodePtr)
   {
      // Display the value in this node.
      cout << nodePtr->value << endl;

      // Move to the next node.
      nodePtr = nodePtr->next;
   }
}
#endif 

Dogs.h:

#ifndef Dogs_H
#define Dogs_H
#include <string>
#include <iostream>
using namespace std;

class Dogs;
template <class T>

ostream& operator << (ostream&, const Dogs&);
istream& operator >> (istream&, Dogs&);

class Dogs
{
private:
    string dgName;
    string dgBreed;
    string dgColour;
    string dgDad;
    string dgMom;


public:
    Dogs(string name ="", string breed ="", string colour ="", string dad ="", string mom ="")
    {
        dgName = name;
        dgBreed = breed;
        dgColour = colour;
        dgDad = dad;
        dgMom = mom;
    }

    friend ostream& operator << (ostream&, const Dogs&);
    friend istream& operator >> (istream&, Dogs&);


};

#endif

如果你能指出我的问题所在,我真的很感激。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

删除带有模板规范的行

template <class T>
^^^^^^^^^^^^^^^^^^
ostream& operator << (ostream&, const Dogs&);

并且不要忘记定义运算符。