private:
struct node{
int key;
struct node *left;
struct node *right;
}treenode,*p;
public:
node* NewNode();

解决方案 »

  1.   

    我是定义了一个类呀
    class CTree  
    {
    private:
    struct node{
    int key;
    struct node *left;
    struct node *right;
    }treenode,*p;
    public:
    CTree* NewNode();
    BOOL DeleNode(int val);
    BOOL InsertNode(int val);
    CTree();
    virtual ~CTree();};
      

  2.   

    class CTree  
    {
    private:
    struct node{
    int key;
    struct node *left;
    struct node *right;
    }treenode,*p;
    public:
    CTree* NewNode();
    BOOL DeleNode(int val);
    BOOL InsertNode(int val);
    CTree();
    virtual ~CTree();};
    上面的定义没错
    node* NewNode(); // 这里是错的,因为在该类以外的代码不能引用struct node
      

  3.   

    class CTree  
    {
    private:
    struct node{
    int key;
    struct node *left;
    struct node *right;
    }treenode,*p;
    public:
    CTree* NewNode();
    BOOL DeleNode(int val);
    BOOL InsertNode(int val);
    CTree();
    virtual ~CTree();};
    这样是没有问题的。你说出错是什么错?
      

  4.   

    这样:
    struct node{
         int key;
         node *left;
         node *right;
    }treenode,*p;
      

  5.   

    错在这
    CTree* CTree::NewNode()
    {
    node t=new CTree();
    }
      

  6.   

    node 是结构体,是类CTree中的一部分,当然不能把一个CTree对象强制转换为它了——除非你重载=操作符。
      

  7.   

    我改成
    node* CTree::NewNode()
    {
    }
    为何也错??
      

  8.   

    CTree* CTree::NewNode()
    {
    node t=new CTree();
    }和node* CTree::NewNode()
    {
    }
    有什么关系?两个没有关系啊?
    上面的是调用构造函数,下面的是一个成员函数
      

  9.   

    可以先把node单独定义,然后把
    CTree* CTree::NewNode()
    {
    node t=new CTree();
    }
    改成
    node* CTree::NewNode()
    {
    node t=new node();
    }
      

  10.   

    node t=new CTree();错了
    new 返回的是指针,不是类对象。
      

  11.   

    node是一个结构体数据成员,
    CTree::NewNode()想返回一个node指针
      

  12.   

    node是定义的CTree私有结构体。你直接用当然有问题。
    你这样定义看看:
    struct node{
    int key;
    struct node *left;
    struct node *right;
    }treenode,*p;
    class CTree  
    {
    private:
    struct node treenode,*p;
    public:
    CTree* NewNode();
    BOOL DeleNode(int val);
    BOOL InsertNode(int val);
    CTree();
    virtual ~CTree();

    };
      

  13.   

    还有
    struct node{
    int key;
    struct node *left;
    struct node *right;
    }treenode,*p;class CTree  
    {
    private:
    struct node treenode,*p;
    public:
    node * NewNode(){return};
    BOOL DeleNode(int val);
    BOOL InsertNode(int val);
    CTree();
    virtual ~CTree();

    };
      

  14.   

    晕~~~还没有改完~~~class CTree  
    {
    private:
    struct node treenode,*p;
    public:
    node * NewNode(){return new node;};
    BOOL DeleNode(int val);
    BOOL InsertNode(int val);
    CTree(){};
    virtual ~CTree(){};

    };这样你就能这样用了:
    CTree tree;
    node * pointer = tree.NewNode();
      

  15.   

    node是定义的CTree私有结构体。CTree成员函数直接用为何有问题。
      

  16.   

    没问题啊。
    比如你这样写:
    class CTree  
    {
    private:
    struct node{
    int key;
    struct node *left;
    struct node *right;
    }treenode,*p;
    public:
    void NewNode(){p = new node;} // 注意这里
    BOOL DeleNode(int val);
    BOOL InsertNode(int val);
    CTree(){};
    virtual ~CTree(){};

    };然后就能这样用:
    CTree tree;
    tree.NewNode();注意我加注释的地方没有返回类型。如果有返回类型,那么这个函数只能在成员函数中调用。而且如果你这样写
    node* NewNode();
    那么你也不能把函数体写到类定义外面:
    node* CTree::NewNode()    //不能编译通过,因为node在这里没有定义。
    {
    ...
    }
      

  17.   

    再问pomelowu(羽战士) 
    我在类定义后,函数体写到类定义外面但是#include"Tree.h"所以说node在这里已经定义了。