为什么我不能对不同的 class 使用相同的模板?
Why can't I use same templates for different class?
我有这段代码,我试图在两个不同的 class 中使用相同的模板。编译时出现错误:
#include <iostream>
#include <memory>
template <class T>
class Node
{
public:
int value;
std::shared_ptr<Node> leftPtr;
std::shared_ptr<Node> rightPtr;
Node(int val) : value(val) {
std::cout<<"Contructor"<<std::endl;
}
~Node() {
std::cout<<"Destructor"<<std::endl;
}
};
template <class T>
class BST {
private:
std::shared_ptr<Node<T>> root;
public:
void set_value(T val){
root->value = val;
}
void print_value(){
std::cout << "Value: " << root.value << "\n";
}
};
int main(){
class BST t;
t.set_value(10);
t.print_value();
return 1;
}
错误:
g++ -o p binary_tree_shared_pointers.cpp --std=c++14
binary_tree_shared_pointers.cpp:39:8: error: elaborated type refers to a template
class BST t;
^
binary_tree_shared_pointers.cpp:21:7: note: declared here
class BST {
^
您没有指定 BST
的类型。
模板是不完整的类型,除非您相应地指定它。另一种选择是编译器可以以某种方式推断出类型。
否则它是一个不完整的类型 - 因此你得到了一个错误。
如果你想制作一棵 int
类型的树,例如它应该是:
BST<int> t;
t.set_value(10);
t.print_value();
请注意,您不需要 class 关键字来声明 t
。
我有这段代码,我试图在两个不同的 class 中使用相同的模板。编译时出现错误:
#include <iostream>
#include <memory>
template <class T>
class Node
{
public:
int value;
std::shared_ptr<Node> leftPtr;
std::shared_ptr<Node> rightPtr;
Node(int val) : value(val) {
std::cout<<"Contructor"<<std::endl;
}
~Node() {
std::cout<<"Destructor"<<std::endl;
}
};
template <class T>
class BST {
private:
std::shared_ptr<Node<T>> root;
public:
void set_value(T val){
root->value = val;
}
void print_value(){
std::cout << "Value: " << root.value << "\n";
}
};
int main(){
class BST t;
t.set_value(10);
t.print_value();
return 1;
}
错误:
g++ -o p binary_tree_shared_pointers.cpp --std=c++14
binary_tree_shared_pointers.cpp:39:8: error: elaborated type refers to a template
class BST t;
^
binary_tree_shared_pointers.cpp:21:7: note: declared here
class BST {
^
您没有指定 BST
的类型。
模板是不完整的类型,除非您相应地指定它。另一种选择是编译器可以以某种方式推断出类型。
否则它是一个不完整的类型 - 因此你得到了一个错误。
如果你想制作一棵 int
类型的树,例如它应该是:
BST<int> t;
t.set_value(10);
t.print_value();
请注意,您不需要 class 关键字来声明 t
。