using a template with a struct incomplete type error
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <iostream> #include <string> #include <map> using namespace std; template<typename T> }; int main() cout << endl; return 0; |
有人可以告诉我为什么我会收到不完整的类型错误吗?我正在尝试根据数据使用不同的映射值类型创建节点。
can someone please tell me why I’m getting incomplete type error?
因为您正在尝试创建指向您尚未定义的类型的指针/尝试创建您尚未定义的类型的动态对象。
您还没有定义一个名为
1 error: template argument required for ‘struct Node’
您可以实例化模板以获得一个类,它是一个类型。尖括号语法用于实例化模板,并传递模板参数。示例:
1
|
Node<std::string>* root = …
|
请注意,如果让编译器从初始化器中推断出指针的类型,那么编译器可以隐式推断类模板参数(该语言特性是在 C 17 中引入的):
1
|
auto* root = new Node(test);
|
附言如果编译,您的示例会泄漏内存。避免裸拥有指针。更喜欢 RAII 容器和智能指针。不需要时也避免动态分配。
此外,变量声明中的
1
|
Node<string>* root = new Node<string>(test);
|
以后别忘了
1
|
Node<string> root{test};
|
最后,你可以在这里用
1
2 3 4 5 |
Node(map<string, T> data)
{ this–>data = data; left = right = bottom = NULL; } |
使用初始化列表和
1
2 3 |
Node(map<string, T> d) :
data{std::move(d)}, left{nullptr}, right{nullptr}, bottom{nullptr} {} |
同样,由于您不再使用
1
|
Node<string> root{std::move(test)};
|
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268882.html