"T"不是参数"T"的有效模板类型参数
'T' is not a valid template type argument for parameter 'T'
我编写了一个程序,在c++中使用类将排序数组转换为BST。我得到以下错误:
error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2065: 'T' : undeclared identifier
error C2923: 'Binary_Search_Tree' : 'T' is not a valid template type argument for parameter 'T'
下面是我的程序:
template <class T>
class Binary_Search_Tree {
public:
struct Bst_Node {
T value;
Bst_Node* left;
Bst_Node* right;
};
Bst_Node* root;
Binary_Search_Tree();
Bst_Node* sortedarraytobst(T* A, int start, int end);
};
template <class T> Binary_Search_Tree<T>::Binary_Search_Tree() {
root = nullptr;
std::cout << "Constructor called" << std::endl;
}
template <class T> Bst_Node* Binary_Search_Tree<T>::sortedarraytobst(T* A, int start, int end) {
if(start > end)
return NULL;
int mid = start + (end - start)/2;
Bst_Node* newnode = new Bst_Node();
newnode->value = A[mid];
newnode->left = sortedarraytobst(A,start,mid-1);
newnode->right = sortedarraytobst(A,mid+1,end);
return newnode;
}
int main()
{
Binary_Search_Tree<int> tree;
int Array[10] = {1,2,5,6,8,9,12};
int n = sizeof(Array)/sizeof(Array[0]);
tree.root = tree.sortedarraytobst(Array,0,n-1);
return 0;
}
请求这方面的帮助。我发现模板的使用非常混乱。
在sortedarraytobst
实现的返回值中,应将Bst_Node*
替换为typename Binary_Search_Tree<T>::Bst_Node*
。当作为返回类型放置时,它被视为"在类之外",因此它不能解析Bst_Node*
。
由于Binary_Search_Tree<T>::Bst_Node
是一个依赖名称,因此定义:
template <class T>
Bst_Node* Binary_Search_Tree<T>::sortedarraytobst(T* A, int start, int end)
{/**/}
应替换为
template <class T>
typename Binary_Search_Tree<T>::Bst_Node*
Binary_Search_Tree<T>::sortedarraytobst(T* A, int start, int end)
{/**/}
或(c++ 11起)
template <class T>
auto Binary_Search_Tree<T>::sortedarraytobst(T* A, int start, int end)
-> Bst_Node*
{/**/}
相关文章:
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- "std::shared_ptr":不是参数"_Ty"的有效模板类型参数
- 具有可变参数非类型参数的模板专用化
- 函数类型参数的模板参数推导
- PowerShell 使用结构类型参数调用 C++ DLL 的导出函数
- 错误 - 自定义数据类型作为有效负载,带有提升::几何
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 为模板传递非类型参数 agument
- 从浮点数中删除小数部分但保留类型的有效方法
- 为什么带有类型参数的运算符 () 可以应用于 result_of 上下文中的类型?
- 使用其他模板类型参数作为要在函数签名中使用的类型别名声明
- 作为模板非类型参数的 C 字符串在 gcc 6.3 中有效,但在 Visual Studio 2017(x64 为 19
- Qt C++ - 创建 QList<Myclass> - 不是参数 'T 的有效模板类型参数
- 函数类型不是模板非类型参数的有效类型
- 'Vehicle'不是参数 '_Ty' 的有效模板类型参数
- 'std::vector':'U64'不是参数 '_Ty' 的有效模板类型参数
- 错误 C2923:'std::vector':'Edge'不是参数"_Ty"的有效模板类型参数?
- boost::enable_if_c 错误:不是模板非类型参数的有效类型
- "T"不是参数"T"的有效模板类型参数