我首先定义了一个模板类,然后定义了另一个类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
}
};
};
答案 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>*
!