我一直在尝试用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;
}
}
答案 0 :(得分:1)
采取心脏!当你学习它时,C(++)是一个混乱的传统和猜测的混乱。这有点像在梅赛德斯引擎内爬行的鼠标。
最终你会觉得自己是发动机设计团队的成员:)
答案 1 :(得分:0)
您的代码在Visual Studio 2008中编译良好,但我确实使用.cpp作为其他用户建议的文件扩展名。许多编译器假设.C文件用于直接C,而.cpp文件用于C ++。你正在做C ++
祝你好运!
答案 2 :(得分:0)
如果无法自动构造节点结构,则会发生此类错误。你的Point类是否有一个零参数的构造函数?否则,您需要向节点添加构造函数。