我創建一個二叉樹,並試圖打印的即時通訊傳遞當我嘗試打印樹中的學生對象的名字,我得到一個錯誤:沒有名爲成員,BST
tree.h:181:46: error: ‘class samuel::Student’ has no member named ‘printInOrder’
str += Node->get_data().printInOrder() + "\n";
這是用我打電話的主要功能
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
這些都給因爲samuel::Student
類型該編譯器搜索printInOrder()
的錯誤
tree.h:70:9: error: passing ‘const samuel::BSTree’ as ‘this’ argument discards qualifiers [-fpermissive]
out << tree.infix(tree.root) << endl;
得到裏面的地址值好像'printInOrder'是'BSTree'的一部分,而不是每個'Student'的。 –
什麼是printInOrder的訪問修飾符?默認情況下它是私人的,所以也許你無法訪問這個私有方法? –
printInOrder是公開的,inOrder是私人的 – Riggy