Класс C++ (с набором), хранящий общие проблемы компиляции классов шаблонов

Так что я все еще новичок в программировании на C++ и очень новичок в шаблонах. Я пытаюсь создать базовый класс шаблона (узел, если хотите), который содержит некоторые общие данные и двойное значение. Затем я хочу, чтобы другой класс содержал набор ранее упомянутого класса шаблона.

У меня проблемы с оператором меньшего, поскольку он идет на сервер в качестве моего компаратора.

Узел&Tree.h

#ifndef _POINTNODE_H_
#define _POINTNODE_

#include <set>

template<typename T>
class PointNode {

 public:

  PointNode(double p){ m_point = p;}
  ~PointNode();

  bool operator < (const &PointNode<T> p1) const;

 private:

   const double m_point;
   T *m_data;

};

template <typename T>
class PointTree {

 public:

  PointTree();
  ~PointTree();

 private:

  std::set<PointNode<T> > tree;

};

#endif

Узел&Дерево.cpp

#inlcude "Node&Tree.h"
#include <set>

template<typename T>
bool PointNode<T>:: operator < (const &PointNode<T> p1) const{
   return m_point < p1.m_point;
}

Я получаю следующие ошибки

Node&Tree.cpp:5:39: error: ISO C++ forbids declaration of ‘parameter’ with no type [-   fpermissive]
Node&Tree.cpp:5:39: error: expected ‘,’ or ‘...’
Node&Tree.cpp:5:6: error: prototype for ‘bool PointNode<T>::operator<(const int&)   const’ does not match any in class ‘PointNode<T>’
Node&Tree.h:15:8: error: candidate is: bool PointNode<T>::operator<(const int&)"

Это в значительной степени не реализовано, но я просто хотел, чтобы основы скомпилировались, по крайней мере... И любые указатели на код или если вы думаете, что я делаю все это неправильно, сообщите мне!

Любая помощь будет потрясающей!


person Odub    schedule 19.04.2013    source источник
comment
Наряду с решением, представленным ниже, пожалуйста, убедитесь, что определение методов класса шаблона видно компилятору. Посмотрите на stackoverflow.com/questions/5180357/   -  person Arun    schedule 19.04.2013


Ответы (2)


bool PointNode<T>:: operator < (const &PointNode<T> p1) const

должно быть:

 bool PointNode<T>:: operator < (const PointNode<T>& p1) const

Вы поместили ссылку & в неправильное положение, поэтому у вас есть forbids declaration of parameter error. В другом месте такая же ошибка.

bool operator < (const &PointNode<T> p1) const;

должно быть

bool operator < (const PointNode<T>& p1) const;
person taocp    schedule 19.04.2013

Сделать объект PointNode ссылкой

bool operator < (const PointNode<T>& p1) const;

И его определение

template<typename T>
bool PointNode<T>:: operator < (const PointNode<T>& p1) const{
   return m_point < p1.m_point;
}

это решит проблему.

person shivakumar    schedule 19.04.2013