我为二叉树的tNode class
提供了以下定义:
#ifndef TNODE_H
#define TNODE_H
template <typename T>
class tNode<T>{
public:
T nodeValue;
tNode<T> *left, *right, *parent;
tNode<T>(const& T value, tNode<T> l = NULL, tNode<T> r = NULL, tNode<T> p){
nodeValue = value;
left = l;
right = r;
parent = p;
}
};
#endif
编译main.cpp时,我遇到以下错误(主要内容没有任何内容):
tNode.h:5:7: error: ‘tNode’ is not a class template
class tNode<T>{
^~~~~
tNode.h:10:18: error: ISO C++ forbids declaration of ‘T’ with no type [-fpermissive]
tNode<T>(const& T value, tNode<T> *l = NULL, tNode<T> *r = NULL, tNode<T> *p){
^
tNode.h:10:18: error: declaration of ‘const int& T’ shadows template parameter
tNode.h:4:11: note: template parameter ‘T’ declared here
template <typename T>
^~~~~~~~
tNode.h:10:20: error: expected ‘,’ or ‘...’ before ‘value’
tNode<T>(const& T value, tNode<T> *l = NULL, tNode<T> *r = NULL, tNode<T> *p){
^~~~~
tNode.h: In constructor ‘tNode<T>::tNode(const int&)’:
tNode.h:10:18: error: declaration of ‘const int& T’ shadows template parameter
tNode<T>(const& T value, tNode<T> *l = NULL, tNode<T> *r = NULL, tNode<T> *p){
^
tNode.h:4:11: note: template parameter ‘T’ declared here
template <typename T>
^~~~~~~~
tNode.h:11:15: error: ‘value’ was not declared in this scope
nodeValue = value;
^~~~~
tNode.h:12:10: error: ‘l’ was not declared in this scope
left = l;
^
tNode.h:13:11: error: ‘r’ was not declared in this scope
right = r;
^
tNode.h:14:12: error: ‘p’ was not declared in this scope
parent = p;
^
非常感谢能够对这些错误提供一些见解的任何帮助。感谢。
答案 0 :(得分:0)
创建类模板的语法错误,应该是这样的......
template <class type> class class_name {
.
.
.
}
此处,type
是占位符类型名称,将在实例化类时指定。
还有构造函数的定义
tNode<T>(const& T value, tNode<T> l = NULL, tNode<T> r = NULL, tNode<T> p)
不遵守默认参数的规则。
在函数声明中,一旦将默认值用于参数, 所有后续参数都必须具有默认值。
答案 1 :(得分:0)
提供的代码在语法和语义上都是不正确的。
从语法上讲,类模板遵循语法template <class A_Type> class class_name
;请注意,泛型类型A_Type
未使用类名称声明(就像稍后实例化模板时那样),而是在template < class ...
- 部分之后。
其次,它将tNode *left
指定为此类的指针,而构造函数tNode(const T &value, tNode l = NULL, ...)
不使用指针(也不是引用)。这将在以后实例化模板时导致编译器错误。
模板应至少看起来像这样:
template <class T>
class tNode{
public:
T nodeValue;
tNode *left, *right, *parent;
tNode(const T &value, tNode *l = NULL, tNode *r = NULL, tNode *p = NULL){
nodeValue = value;
left = l;
right = r;
parent = p;
}
};