2013-11-27 54 views
1

對於一個學校項目,我想在同一時間製作二叉搜索樹,我們應該學習如何在課堂上使用「友誼」。我得到在編譯時的錯誤是:我把代碼中的註釋,其中的誤差爲清楚起見起源]'結構節點'的無效使用/前向聲明

$ 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 

基本上我希望能夠訪問節點類好像類是嵌套(我不是但是爲了這個編程任務,允許將它嵌套)。顯然,僅僅使用'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' 
     { 

     } 
    } 
} 
+0

那麼,你的'Node.h'包含在哪裏?我沒有看到它的任何地方。 – AnT

+0

在Node.cpp文件中(該文件雖然完全是空的) – user3040019

+0

這不起作用。 'BST.cpp'不知道關於你的'Node.cpp'的任何信息。如果你想在'BST.cpp'中使用'Node'的內部,你必須在'BST.cpp'中包含'Node.h'。沒有它,你的'Node'在'BST.cpp'中保持未定義。 – AnT

回答

2

編譯器已不見Node定義當它到達在BST.cpp該行。請注意,這是編譯器需要查看Node結構的第一行。您需要在BST.cpp中輸入#include "Node.h"