| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 255 人关注过本帖
标题:如何申请C++模板类型的存储空间
只看楼主 收藏
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:91
专家分:93
注 册:2017-1-21
结帖率:82.35%
  已结贴   问题点数:20  回复次数:3   
如何申请C++模板类型的存储空间
程序代码:
#ifndef BINARYTREE
#define BINARYTREE
template <typename T>
struct TreeNode
{
    TreeNode(T a=0):data(a),lchild(0),rchild(0){}
    T data;
    TreeNode<T> *lchild,*rchild;
};
#endif

程序代码:
#include<iostream>
#include<vector>
using namespace std;
//-----------------------------------------------------
#include"Tree.h"
TreeNode<int> *previousVisitNode;
void flatten(TreeNode<int> *root)
{
    if(!root) return;
    TreeNode<int> *right=root->rchild;
    if(previousVisitNode!=0)
    {
        previousVisitNode->rchild=0;
        previousVisitNode->lchild=root;
    }
    previousVisitNode=root;
    flatten(root->lchild);
    flatten(right);
}
//-----------------------------------------------------
TreeNode<int>* CreatBinaryTree(vector<int> a)//建立二叉排序树
{
    if(a.empty()) return 0;
    TreeNode<int> *p,*q,*root=0;
    for(int i=0;i<a.size();i++)
    {
        if(root==0)
        {
            p=new TreeNode;//这儿
            p->data=a[i];
            p->lchild=0;p->rchild=0;
            root=p;
        }
        else
        {
            p=new TreeNode;//还有这儿
            p->data=a[i];
            p->lchild=0;p->rchild=0;
            TreeNode<int> *pre;
            while(q)
            {
                if(p->data>q->data) { pre=q;q=q->rchild; }
                else if(p->data<q->data) { pre=q;q=q->lchild; }
                else break;
            }
            if(q!=0) continue;
            if(p->data>pre->data) pre->rchild=p;
            else pre->lchild=p;
        }
        q=root;
    }
    return root;
}
int main()
{
    int a[]={5,4,3,2,1,6,7,8,9};
    vector<int> num(a,a+9);
    TreeNode<int> *r=CreatBinaryTree(num);
    flatten(r);
    for(TreeNode<int> *p=r;p;p=p->lchild)
        cout <<p->data<<" ";
    cout<<endl;
    return 0;
}

E:\练习题\二叉树扁平化\Cpp2.cpp(29) : error C2955: 'TreeNode' : use of class template requires template argument list
        e:\练习题\二叉树扁平化\tree.h(9) : see declaration of 'TreeNode'
E:\练习题\二叉树扁平化\Cpp2.cpp(29) : error C2955: 'TreeNode' : use of class template requires template argument list
        e:\练习题\二叉树扁平化\tree.h(9) : see declaration of 'TreeNode'
E:\练习题\二叉树扁平化\Cpp2.cpp(29) : error C2512: 'TreeNode' : no appropriate default constructor available
E:\练习题\二叉树扁平化\Cpp2.cpp(36) : error C2955: 'TreeNode' : use of class template requires template argument list
        e:\练习题\二叉树扁平化\tree.h(9) : see declaration of 'TreeNode'
E:\练习题\二叉树扁平化\Cpp2.cpp(36) : error C2955: 'TreeNode' : use of class template requires template argument list
        e:\练习题\二叉树扁平化\tree.h(9) : see declaration of 'TreeNode'
E:\练习题\二叉树扁平化\Cpp2.cpp(36) : error C2512: 'TreeNode' : no appropriate default constructor available
执行 cl.exe 时出错.

Cpp2.exe - 1 error(s), 0 warning(s)
不懂如何申请模板的动态空间,另外我不是很确定结构体模板是不是真正确的,求相告。

[此贴子已经被作者于2018-1-13 10:52编辑过]

2018-01-13 10:24
yangfrancis
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:127
帖 子:1471
专家分:7446
注 册:2014-5-19
  得分:0 
看报错提示。TreeNode没有不带参数的构造函数,这样你的那些  = new TreeNode语句就不能构造成功。

发帖用贴图是坏习惯,别人不会愿意手输并调试的,最多就是目测一下。
2018-01-14 08:16
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:91
专家分:93
注 册:2017-1-21
  得分:0 
回复 2楼 yangfrancis
    p=new TreeNode<int>;
E:\练习题\二叉树扁平化\Cpp2.cpp(29) : error C2512: 'TreeNode<int>' : no appropriate default constructor available
这样也不行,,我不清楚这默认的格式是啥。。
2018-01-14 19:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:236
帖 子:5500
专家分:30812
注 册:2011-1-18
  得分:20 
回复 3楼 moox
p = new TreeNode<int>( a[i] );
2018-01-16 08:56







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.097090 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved