繁体   English   中英

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

[英]Error: “Undefined reference to operator<<(std::ostream&, Dogs const&)”

在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

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

删除带有模板规范的行

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM