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'
{
}
}
}
那麼,你的'Node.h'包含在哪裏?我沒有看到它的任何地方。 – AnT
在Node.cpp文件中(該文件雖然完全是空的) – user3040019
這不起作用。 'BST.cpp'不知道關於你的'Node.cpp'的任何信息。如果你想在'BST.cpp'中使用'Node'的內部,你必須在'BST.cpp'中包含'Node.h'。沒有它,你的'Node'在'BST.cpp'中保持未定義。 – AnT