格式化返回指向包含类的指针的函数?

时间:2017-10-19 15:02:09

标签: c++ function class pointers containers

我正在尝试使用节点指针的链接列表。 List是Node的容器类。我正在尝试格式化列表的查找函数,该列表在链接列表中找到该节点时返回指向节点的指针。但是,我不断收到错误,说没有类型说明符。 (错误显示在下面链接的屏幕截图中,主要是查看Node.h中的第10行和第17行)。如何正确格式化以消除错误? https://imgur.com/vicL8FS

NODE.H //Both class declarations contained here
class list //container class
{
public:
    list();
    ~list();
    void insert(string f, string l, int a);
    node *find(string first, string last); //Pointer to contained class
private:
    node *head; //errors here
    int length;
};
class node
{
    friend list;
public:
    node();                           // Null constructor
    ~node();                          // Destructor 
    void put(ostream &out);           // Put
    bool operator == (const node &);  // Equal
private:
    string first, last;
    node *next;
};

NODE.CPP

#include "Node.h"
   node list::*find(string first, string last) 
    {
        return NULL; //logic not written yet
    }
//MAIN
p = a.find(first, last); //p is a pointer to node, a is a list.

2 个答案:

答案 0 :(得分:1)

现在node是在list之后定义的,编译器在开始解析node类主体时不知道名称list。您需要添加前向声明:

class node;

class list
{
...

因此,node将被正确识别为类型名称。

答案 1 :(得分:0)

错误的原因是当编译器编译类list的定义时,它不知道如何声明名称node

有几种方法可以解决问题。你可以使用详细的类名。

例如,您可以首先定义类节点并使用类列表的详细名称。

class node
{
    friend class list;
public:
    node();                           // Null constructor
    ~node();                          // Destructor 
    void put(ostream &out);           // Put
    bool operator == (const node &);  // Equal
private:
    string first, last;
    node *next;
};

class list
{
    //...
};

或者您可以在类node的定义中使用类list的详细名称。例如

class list //container class
{
public:
    list();
    ~list();
    void insert(string f, string l, int a);
    class node *find(string first, string last); //Pointer to contained class
private:
    class node *head;
    int length;
};

class node
{
    //...
};

或者您可以使用班级node的前向声明。

class node;

class list //container class
{
public:
    list();
    ~list();
    void insert(string f, string l, int a);
    node *find(string first, string last); //Pointer to contained class
private:
    node *head;
    int length;
};

class node
{
    //...
};

或者您可以使用班级list的前向声明。

class list;

class node
{
    friend list;
public:
    node();                           // Null constructor
    ~node();                          // Destructor 
    void put(ostream &out);           // Put
    bool operator == (const node &);  // Equal
private:
    string first, last;
    node *next;
};

class list
{
    //...
};