"T"不是参数"T"的有效模板类型参数

'T' is not a valid template type argument for parameter 'T'

本文关键字:类型参数 有效 参数      更新时间:2023-10-16

我编写了一个程序,在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*
{/**/}