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

C++ 如何在另一个类中定义模板类变量?,c++,class,C++,Class,我首先定义了一个模板类,然后定义了另一个类节点3,在该类中我定义了一个变量,它的类型是class first,名为Tree_2。现在这很好,但是当我试图编写一个函数getTree_2,它应该返回Tree_2类时,我得到了一个错误,我不明白为什么。。。 我得到的错误是: 无效参数的候选参数为:first* 树2(第二个::Cmp_节点2)' 大概是这样的: template <class element, class compare_fuc> class first { in

我首先定义了一个模板类,然后定义了另一个类节点3,在该类中我定义了一个变量,它的类型是class first,名为Tree_2。现在这很好,但是当我试图编写一个函数getTree_2,它应该返回Tree_2类时,我得到了一个错误,我不明白为什么。。。 我得到的错误是:

  • 无效参数的候选参数为:first*
    树2(第二个::Cmp_节点2)'
大概是这样的:

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
   };
模板
头等舱{
int x;
比较_fuc cmpFunc;
//这里有更多的东西
公众:
第一个(比较函数cmp):x(0),cmpFunc(cmp){};
~first(){};
//还有更多的东西
};
现在,我定义了另一个类,该类应该从class 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
    }
};
};
第二类{
私人:
类节点2{
int y1;
int y2;
公众:
显式节点_2(inty1,inty2):y1(y1),y2(y2){};
~Node_2(){};
};
类节点_3{
私人:
//Cmp_节点2是我定义的一个类,用于比较节点2
第一个*树2(Cmp节点2);
puclic:
第一个*getTree_2()
{
return Tree_2;///这里我得到了错误
}
};
};

首先,您没有提供Cmp_节点2的定义;你有一些打字错误。但当我们看到问题是您错误定义了
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>*'
:成员函数中的“第一个”*
第二个::节点_3::getTree_2()':
:40:20:错误:无法转换“second::Node_3::Tree_2”
从类型“first*(second::Node_3::)(second::Cmp_node2)”开始
键入“first*”
你为什么得到这个?好吧,看看定义:

first<Node_2,Cmp_node2>* Tree_2(Cmp_node2);
第一个*Tree_2(Cmp_节点2);

您以为是定义类型为
first*
的成员变量,但实际上,您定义了一个成员函数,它接受
Cmp\u node2
并返回
first*

你怎么能用四种不同的方式拼错“defined”。。。顺便说一句,
Tree_2
是一个函数,而不是一个变量。英语是一门难学的语言:(
returntree_2(Cmp_node2{});
?我在执行您建议的操作时遇到了这个错误:扩展初始值设定项列表仅在-std=c++11或-std=gnu++11
returntree_2(Cmp_node2()中可用)
C++03中
基本上我所尝试的是:首先应该是一棵avl树的末尾。节点3是avl树的模板类型,但在这个节点中,我希望它指向另一棵avl树,另一棵avl树是节点2。这是我做的,但在一个更大的代码中,但这正是我的总结problem@jena90例如我不是对你的类及其功能是否有意义提出建议。我只是说你的语法错了。但是上面的人帮助我解决了所有问题:\@jena90:一旦你在这里提出问题,问题不再是你是否解决了所有问题,而是其他人阅读问题和answ但是我真的认为我写了一个很好的问题,很抱歉,我会记住这一点