gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:11:24 25 4
gpt4 key购买 nike

对于一个学校项目,我正在尝试制作一个二叉搜索树,同时我们应该学习如何在类里面使用“友元”。我在编译时遇到的错误是:[为了清楚起见,我在错误来源的代码中添加了注释]

$ 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”是行不通的,但我该怎么做才能让它工作呢?

节点.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'
{

}
}
}

最佳答案

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

关于c++ - 'struct Node' 的无效使用/转发声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20233290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com