C ++链接列表:类中的struct问题

时间:2010-12-26 14:32:11

标签: c++ linked-list

我一直在尝试用C ++实现链表。我在网上找到了这个实现,他们为列表的节点创建了一个结构。 尝试将新节点添加到列表时,出现此错误:

List.C:在成员函数`bool Linked :: addVertex(Point)':

List.C:23:错误:没有匹配函数来调用`Linked :: node :: node()'

List.H:35:注意:候选人是:Linked :: node :: node(const Linked :: node&)

这是我的代码,非常感谢.. :)

List.H

#ifndef _AUXILIARY_H_
#define _AUXILIARY_H_
#include <string.h>
#include <math.h>

class Linked
{


 public:
 // Constructor: initializes a set of nodes
 Linked();

 // Linked methods
 bool addNode(Point p);
 bool removeNode(int index);
 bool getNode(int index, Point* p) const;
 bool setNode(int index, Point p);
 int getNodesCount() const;

 // Destructor: delete the set of nodes
 ~Linked();

 private:
 // Definition of the nodes on the array of nodes
 /*typedef struct _Node* pNode;
 typedef struct _Node
 {
  Point pt;
  int index;
  Node *next;
 }  Node;
 */
 struct node
 {
  Point pt;
  int index;
  node *next;
 } *pLinked;

 // Definition of Bool type
 typedef enum {FALSE, TRUE} Bool;
};

#endif // _AUXILIARY_H_

List.C

#include <string.h>
#include "List.H"

Linked::Linked()
{
     pLinked=NULL;
}

bool Linked::addNode(Point p)
{
 node *q,*t;
 int i=0;
 q = pLinked;

 while (q+i)
 {
  if ((q->pt.getX() == p.getX()) && (q->pt.getY() == p.getY()))
   return FALSE;
  q = q->next;
  i++;
 }

 t = new node;
 t->pt.setPoint(p);
 t->index = getNodesCount();
 t->next = q->next;
 q->next = t;

 return TRUE;
}

bool Linked::removeNode(int index)
{
    node *q,*r;
 q = pLinked + index;
 r = q - 1;
 if (q == NULL) 
  return FALSE;
 r->next = q->next;
 delete q;
 return TRUE;
}

bool Linked::setNode(int index, Point p)
{
 node *q;
 q = pLinked + index;
 if (q == NULL) 
  return FALSE;
 p.setPoint(q->pt);
 return TRUE;
}

int Linked::getNodesCount() const
{
 node *q;
 int count=0;
 for( q=pLinked ; q != NULL ; q = q->next )
        count++;
 return count;
}

Linked::~Linked()
{
 node *q;
 if( pLinked == NULL )
  return;
 while( pLinked != NULL )
 {
  q = pLinked->next;
  delete pLinked;
  pLinked = q;
 }
}

3 个答案:

答案 0 :(得分:1)

采取心脏!当你学习它时,C(++)是一个混乱的传统和猜测的混乱。这有点像在梅赛德斯引擎内爬行的鼠标。

最终你会觉得自己是发动机设计团队的成员:)

答案 1 :(得分:0)

您的代码在Visual Studio 2008中编译良好,但我确实使用.cpp作为其他用户建议的文件扩展名。许多编译器假设.C文件用于直接C,而.cpp文件用于C ++。你正在做C ++

祝你好运!

答案 2 :(得分:0)

如果无法自动构造节点结构,则会发生此类错误。你的Point类是否有一个零参数的构造函数?否则,您需要向节点添加构造函数。