gpt4 book ai didi

c++ - 没有名为 BST 的成员

转载 作者:行者123 更新时间:2023-11-28 05:26:43 24 4
gpt4 key购买 nike

我正在创建一棵二叉树并尝试打印我传入的学生对象的名称。当我尝试打印该树时,出现错误:

tree.h:181:46: error: ‘class samuel::Student’ has no member named ‘printInOrder’

str += Node->get_data().printInOrder() + "\n";

这是我在 main 中调用的函数

BSTree<Student>* student_tree = new BSTree<Student>;
Student student = Student("Adam");
student_tree->insert(student);
student_tree->printInOrder();

string printInOrder(){return inOrder(root, 0);}

private:
string inOrder(BTNode<value_type>* Node, size_t level)
{
string str ="";
if(Node != NULL)
{
str += inOrder(Node->get_right(), level++);
for(int i = 1; i <= level; ++i)
{
str = str + "| ";
}
str += Node->get_data().printInOrder() + "\n";
str += inOrder(Node->get_left(), level++);
}
return str;
}

我不确定为什么当我尝试访问 printInOrder 时它会通过 Student。这是我的学生类

typedef Student value_type;
Student::Student()
{

}

Student::Student(std::string init_name, float init_grade)
{
name = init_name;
std::string studentName[50]={"Adam", "Cameron", "Jackson", "KiSoon", "Nicholas", "Adrian", "Chris", "Jacob", "Lance", "Ryan",
"Alexander", "Damian", "James", "Liam", "Sang", "Andrew", "David", "Jared", "Madison", "Shane", "Ashley", "Dillon",
"Jodi", "Magdalena", "Simon", "Benjamin", "Dylan", "Jonathan", "Marcus", "Thomas", "Bradley", "Ethan" "Joshua", "Mark",
"Timothy", "Brobie", "Frederik", "Julius", "Melanie", "Trent", "Callan", "Hong", "Kelly", "Min", "Troy", "Callum", "Hugh", "Kenias", "Mitchell", "Zaanif"};
for (int i = 0; i <50; i++)
{
int j = (rand() % (i-1));
string temp = studentName[j];
studentName[j] = studentName[i];
studentName[i] = temp;
}
}
Student::~Student()
{

}
void Student::set_name(string new_name)
{
name = new_name;
}

const string Student::get_name() const
{
return name;
}

void Student::set_grade(float new_grade)
{
grade = new_grade;
}

float Student::get_grade()
{
return grade;
}

我尝试过的另一种方法是使用

string infix(BTNode<value_type>* Node)
{
if (Node == NULL)
{
return "";
}else{
return (infix(Node->get_left()) + Node->get_data()) +
infix(Node->get_right());
}
}

friend ostream& operator << (ostream& out, const BSTree<value_type>& tree)
{
out << tree.infix(tree.root) << endl;
return out;
}

然后调用cout << student_tree << endl然而,这打印了一个内存地址,是否有人也能澄清为什么会发生这种情况,谢谢

编辑:改变了我插入学生的方式。已更改 cout << student_tree << endlcout << *student_tree << endl这给出了错误

tree.h:70:9: error: passing ‘const samuel::BSTree’ as ‘this’ argument discards qualifiers [-fpermissive]

out << tree.infix(tree.root) << endl;

最佳答案

tree.h:181:46: error: ‘class samuel::Student’ has no member named ‘printInOrder’

Node->get_data()返回 samuel::Student 的对象type 因为这个编译器搜索 printInOrder()samuel::Student类型。根据上面的代码,它不在那里。要解决此问题,请实现该方法:

std::string Student::printInOrder()  
{
// Return the data to be printed
}

student_tree->insert(* new Student());

看起来很可疑。树包含 Student按值的对象。您创建一个 Student堆上的对象,取消引用指针并将值复制到树中。在那之后指针丢失了。这将导致内存泄漏问题。

cout << student_tree << endl however this printed a memory address

因为它被声明为 BSTree<Student>* student_tree .它是一个指向树的指针,所以输出是正确的,你打印地址。要打印树值,您需要取消引用指针:cout << *student_tree << endl .

关于c++ - 没有名为 BST 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40421577/

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