C ++类(带有set)存储通用模板类...编译问题

时间:2013-04-19 02:46:26

标签: c++ templates generics compare set

所以我仍然是一些新的C ++编程和非常新的模板。我正在尝试创建一个基本的模板类(如果你愿意,一个节点),它包含一些通用数据和一个double。然后我想让另一个类包含一组前面提到的模板类。

我在使用less-than操作符时遇到了问题,因为它作为我的比较器进入服务器。

节点&安培; 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

节点&安培; Tree.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&)"

这在很大程度上是未实现的,但我只想获得至少编译的基础知识......以及代码上的任何指针,或者如果您认为我这样做都错了请告诉我!

任何帮助都会很棒!

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

这将解决问题。