没有名为BST的成员
Has no member named, BST
我正在创建一个二叉树,并试图打印我传入的学生对象的名称。当我尝试打印树时,我得到一个错误:
tree.h:181:46:错误:' class samuel::Student '没有名为' 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时,它会通过学生。这是我的学生班
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 << endl
更改为cout << *student_tree << endl
,给出错误
tree.h:70:9:错误:传递' const samuel:: bstreet '作为' this '参数放弃限定符[-fpermissive]
out << tree.infix(tree.root) << endl;
tree.h:181:46:错误:' class samuel::Student '没有名为' printInOrder '的成员
Node->get_data()
返回samuel::Student
类型的对象,因为编译器在samuel::Student
类型中查找printInOrder()
。根据上面的代码,它不在那里。要解决此问题,请实现以下方法:
std::string Student::printInOrder()
{
// Return the data to be printed
}
student_tree->insert(* new Student());
看起来可疑。树按值包含Student
对象。您在堆上创建一个Student
对象,解引用指针并将值复制到树中。在那之后指针丢失了。这将导致内存泄漏问题。
cout & lt; & lt;student_tree & lt; & lt;然而,这打印了一个内存地址
因为它被声明为BSTree<Student>* student_tree
。它是指向树的指针,所以输出是正确的,你打印地址。要打印树的值,需要对指针解引用:cout << *student_tree << endl
.
继续其他答案…
然后调用cout <<student_tree & lt; & lt;最后,然而,这打印了一个内存地址,有人能解释一下为什么会这样吗还有,谢谢
BSTree<Student>* student_tree = new BSTree<Student>;
student_tree
是一个指向BSTree<Student>
的指针,这意味着它保存了BSTree对象的内存位置(内存地址),该对象在本例中是一个未命名的对象。
必须通过执行*student_tree
std::cout << *student_tree; // actual value, and will call operator<<
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- 多成员Constexpr结构初始化
- 没有名为BST的成员