'struct Node'的无效使用/转发声明

时间:2013-11-27 03:22:37

标签: c++ compiler-errors friend

对于一个学校项目,我正在尝试制作一个二叉搜索树,同时我们应该学习如何在课堂上使用“友谊”。我在编译时得到的错误是:[为了清晰起见,我在代码中放置了错误源代码中的注释]

$ make -f makefile.txt
g++ -Wall -W -Werror -pedantic -g -c BST.cpp
BST.cpp: In member function `void BST::insert(std::string, std::string)':
BST.cpp:13: error: invalid use of undefined type `struct Node'
BST.h:19: error: forward declaration of `struct Node'
makefile.txt:9: recipe for target `BST.o' failed
make: *** [BST.o] Error 1

基本上我希望能够访问Node类,就好像该类是嵌套的一样(但是为了这个编程任务,我不允许嵌套它)。显然,简单地使用'ptr-> m_data'是行不通的,但我能做些什么才能使它工作?

Node.h

#ifndef NODE_H_INCLUDED
#define NODE_H_INCLUDED

#include <iostream>
#include <string>

using namespace std;

class BST;
class Node
{
public:
    Node(string key, string data)
    {n_key = key; n_data = data;}
    ~Node();
private:
    string m_key;
    string m_data;
    Node *m_left;
    Node *m_right;
    //Node *m_parent;
};


#endif // NODE_H_INCLUDED

BST.h

#ifndef BST_H_INCLUDED
#define BST_H_INCLUDED

#include <iostream>
#include <string>

using namespace std;

class BST
{
public:
    BST()
    {m_root = NULL;}
    ~BST();
    void insert(string key, string data);
    void find(string key);
    void remove(string key, string data);
    void print();
    friend class Node; //Error: forward declaration of 'struct Node'
private:
    Node* m_root;

};

#endif // BST_H_INCLUDED

为什么当我调用下面的代码行时,它会读出上面的错误消息? (注意:以下代码来自BST.cpp)

#include "BST.h"

void BST::insert(string key, string data)
{
    Node* yPtr = NULL;
    Node* xPtr = m_root;
    while(xPtr != NULL)
    {
        yPtr = xPtr;
        if(key < xPtr->m_key) //Error: invalid use of undefined type 'struct Node'
        {

        }
    }
}

1 个答案:

答案 0 :(得分:2)

当编译器到达BST.cpp中的那一行时,编译器还没有看到Node的定义。请注意,这是编译器需要查看Node结构的第一行。您需要在BST.cpp。{/ p>中#include "Node.h"