Hello everyone.

I've been trying to implement a linked list in C++. I found this implementation on the web, where they created a struct for the list's nodes. When trying to add a new node to the list, I get this error:

List.C: In member function `bool Linked::addNode(Point)':
List.C:23: error: no matching function for call to `Linked::node::node()'
List.H:35: note: candidates are: Linked::node::node(const Linked::node&)

And here's my Code, and thank you very much.. :)

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;
};

#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;
	}
}

The compiler is not generating a default constructor for your struct. I'm not absolutely sure why, so I won't speculate and steer you in the wrong direction. Where does Point come from?

Point comes from a different class, which compiles just fine. Do you suspect I need to create a constructor for the struct?

You may want to define a constructor and a copy constructor.

Thank you everyone for your responses.
The problem has been solved. It turns out, when defining my Point class, I did not create a default constructor. :)

Glad you figured it out. I tried reinventing the Point class, but I wasn't reproducing the problem.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.