如何在另一个类中定义模板类变量?

时间:2018-05-17 21:22:19

标签: c++ class

我首先定义了一个模板类,然后定义了另一个类Node_3,在该类中我定义了一个变量,其类型是类,首先称为Tree_2。现在这个工作正常,但是当我尝试编写一个函数getTree_2,它应该返回Tree_2类我得到一个错误,我不明白为什么...... 我得到的错误:

  
      
  • 无效的参数'候选人是:第一个<第二:: Node_2,第二:: Cmp_node2> *
      Tree_2(second :: Cmp_node2)'
  •   

这样的事情:

template <class element, class compare_fuc>
class first {
   int x;
   compare_fuc cmpFunc;
   // more things here
   public:
         first(compare_fuc cmp): x(0),cmpFunc(cmp) {};
         ~first() {};

         // and more things here
   };

现在我定义了另一个应该从类first类型定义变量的类:

class second{

private:

class Node_2{
    int y1;
    int y2;
    public:

    explicit Node_2(int y1,int y2) : y1(y1),y2(y2){};

    ~Node_2() {};
};

class Node_3{
private:
//Cmp_node2 is a class i defined that compares nodes 2
first<Node_2,Cmp_node2>* Tree_2(Cmp_node2);
puclic:
    first<Node_2,Cmp_node2>* getTree_2()
    {
        return Tree_2;  /// here i get the error
    }
};
};

1 个答案:

答案 0 :(得分:0)

嗯,首先,您没有提供Cmp_node2的定义;你有一些错别字。但是当我们fix your code时,我们发现问题在于您错误定义Type2,这就是全部:

<source>: In member function 'first<second::Node_2, second::Cmp_node2>* 
second::Node_3::getTree_2()':

<source>:40:20: error: cannot convert 'second::Node_3::Tree_2' 
from type 'first<second::Node_2, second::Cmp_node2>*(second::Node_3::)(second::Cmp_node2)' 
to type 'first<second::Node_2, second::Cmp_node2>*'

你为什么这样做?好吧,看看定义:

first<Node_2,Cmp_node2>* Tree_2(Cmp_node2);

您认为您正在定义first<whatever>*类型的成员变量,但实际上,您定义了一个成员函数,其中包含Cmp_node2和返回first<whatever>*