- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
(编辑版)
我目前正在编写二叉搜索树算法。 (使用 xCode IDE)我从 txt 文件中获取数据并将其作为二进制搜索树插入。这是来自 txt 文件的数据示例。
3800 李维克多; 2.8
3000 布朗,乔安妮; 4.0
正如您在 student.h 中看到的,有 2 个变量,分别是 id 和 student。 Id 包含数据“3800”,student 包含“Lee, Victor; 2.8”。 txt 的每一行都被视为一个根。现在,我必须通过唯一键 id(Ex. "3800") 进行搜索,如果在树中找到它则打印出来。我有 5 个文件,BinaryNode.h、BinaryTree.h、BinarySearchTree.h、Student.h、main.cpp。所有 3 个二进制头文件都使用模板,而 Student.h 没有模板。所以,这是我的 int main。
int main()
{
BinarySearchTree<Student> tree;
getData(tree); (I didn't include getData part, but consider tree has txtfile data.)
bool found = false;
char input;
do
{
cout << "Enter a key letter to access to a corresponding menu." << endl << endl;
cout << "T – Print tree as an indented list" << endl;
cout << "S – Search by a unique key (student ID)" << endl;
cout << "B – Tree Breadth-First Traversal: Print by level" << endl;
cout << "D – Depth-First Traversals: inorder, preorder, postorder" << endl;
cout << "R – Find the longest branch and print it (from leaf to root)" << endl;
cout << "H – Help" << endl;
cout << "Q – Quit" << endl << endl;
cout << "Input: ";
cin >> input;
cout << endl;
if(input == 'T' || input == 'S' || input == 'B' || input == 'D' || input == 'R' || input == 'H' || input == 'Q' || input == 'A')
{
if(input == 'T')
{
//print tree as indented
}
else if(input == 'S')
{
//search by student ID
Student *result = new Student;
int id;
cout << "Enter the student ID to search the matching student." << endl;
cin >> id;
result->setId(id);
found = tree.getEntry(*result);
}
我将输入数据放入结果中并尝试搜索数据。
//公共(public)函数定义中我的getEntry函数
template<class ItemType>
bool BinarySearchTree<ItemType>::getEntry(ItemType& anEntry)
{
BinaryNode<ItemType>* returnedItem = findNode(BinaryTree<ItemType>::rootPtr, anEntry);
if (returnedItem)
{
anEntry = returnedItem->getItem();
return true;
}
else return false;
}
//查找节点函数
template<class ItemType>
BinaryNode<ItemType>*
BinarySearchTree<ItemType>::findNode(BinaryNode<ItemType>* nodePtr,
ItemType & target)
{
ItemType result = result.getId(); <------- ******error here*******
ItemType root = nodePtr->getItem().getId();
if (nodePtr == nullptr)
return nullptr;
if (result == root)
return root;
if (result > root)
root = findNode(nodePtr->getRightPtr(), target);
else
root = findNode(nodePtr->getLeftPtr(), target);
return root;
}
我的 findNode 函数出错。
->没有从“int”到“Student”的可行转换
//学生.h
class Student
{
private:
int id;
std::string name;
public:
Student() { id = 0; name = ""; }
Student(int newId, std::string newName) { id = newId; name = newName; }
friend bool operator >= (const Student l, const Student& r)
{
return std::tie(l.id, l.name) < std::tie(r.id, r.name);
}
friend bool operator == (const Student l, const Student& r)
{
return std::tie(l.id, l.name) < std::tie(r.id, r.name);
}
friend bool operator < (const Student l, const Student& r)
{
return std::tie(l.id, l.name) < std::tie(r.id, r.name);
}
friend bool operator > (const Student l, const Student& r)
{
return std::tie(l.id, l.name) < std::tie(r.id, r.name);
}
/*
Student& operator = (Student& t_id)
{
if(this != &t_id)
id = t_id.getId();
return *this;
}
*/
void getStudent() { std::cin >> id; }
int getId() const { return id; }
void setId(int t_id) { id = t_id; }
std::string getName() const { return name; }
void setName(std::string t_name) { name = t_name; }
//ItemType getGpa() const { return gpa; }
//virtual void setGpa(std::string t_gpa) { gpa = t_gpa; }
我需要 = 运算符来解决这个问题吗?实际上,我创建了 = 运算符,但是如果我启用那个 = 运算符代码,其他函数中带等号的其他代码遇到错误。 (没有可行的重载 '=')
我该如何解决这个错误?感谢您的帮助。
最佳答案
错误只是说你没有 operator=
定义允许您分配 int
或 string
到 Student
. getId()
和 getName()
分别返回int
和 string
你正试图将他们的结果分配给 ItemType
在你的情况下是 Student
.
您没有采用 int
的 Student 构造函数或 string
要么,这让我觉得你可能不想从 int
进行隐式转换或 string
至 Student
(我个人不建议这样做)。
所以要么:
getId()
和 getName()
(我认为是这样的)getId()
和 getName()
函数错误,应返回 Student
符合模板要求修复的一个选项是:
ItemType x(a.getId(), a.getName());
以int
调用构造函数和 string
.请注意,我更改了变量名称,因为您的代码实际上没有意义:您分配 result.getId()
至 result
你刚刚定义的!!
你的 operator=
的原因不工作是因为你没有拍 const
引用作为参数,因此它不能与 const
一起使用=
右侧的对象,产生新的错误。但是,修复它不会使其适用于 int
和 string
只要您没有采用这些的隐式构造函数。
您的代码中还有许多其他奇怪的东西,例如您的 getStudent()
不是 setter/getter 的方法,您应该以不同的方式命名它,并可能使它采用 istream
引用作为参数,或者在构造函数中使用赋值而不是初始化列表:
Student() : id(0), name("") {}
Student(int newId, std::string newName) : ud(newId), name(newName) {}
或者你的operator>=
, operator>
和 operator==
实际上与<
相比.
关于c++ - 没有从 'int' 到 'Student' 的可行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36005119/
我对这些术语感到困惑。 假设我们有一个 Student 类,那么 的含义是什么 class Student{ public: Student(const Student& a){ ..
嘿伙计们,我可以得到一些关于这个java项目的帮助吗我的问题是这一行Student s = new Student(r.getChar(),r.getChar(),r.getNum(),r.getNu
这个问题在这里已经有了答案: What causes error "No enclosing instance of type Foo is accessible" and how do I fix
在我的一次面试中,一位面试官问我: 给定一个 Student 类和两个对象 s1 和 s2: s1 = new Student(); s2 = new Student(); s1 == s2 如何返回
这个问题在这里已经有了答案: Why can a "private" method be accessed from a different instance? (4 个答案) 关闭 7 年前。 那
我想让我的类(class)在存储在列表中时可以排序(按年龄)。 我读到这个:IComparable Vs IComparer我让我的类(class)可排序。 public class Student
我有一个 List和 String firstName="George" .我想从与 "George" 匹配的列表中提取学生对象没有迭代列表。可能吗? 可能是需要某些方法覆盖或任何使其工作的方法。 p
我收到一个错误extraqualification 'student::' on member 'student' [-fpermissive]。 还有为什么 name::name 这样的语法会用在构
嗨,我正在为 C 类制作这个程序,我已经绞尽脑汁,我来到这里,因为我不能去我的老师或辅导部门,因为当我不工作时他们不可用。 . 我在使用这两个函数时遇到问题 void examination_seat
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
请考虑以下代码: class Student { } enum StudentType { } static void foo(IDictionary> students) { } static
What should i do?, i try many ways to solve this problem but still uncaught type error .push and .ma
每当我想在 C++ 上使用模板在二叉树上添加一个元素时,我就会遇到这个错误,而且我很难修复它, 所以这里是我的代码是 Tree.c 文件: template ostream & operator
创建数据库“student”后,当我设置该数据库的权限时,出现错误,并显示消息“错误 1146(42S02):表“student.db”不存在。我不明白为什么会发生这种错误,尽管我确实创建了数据库。
我正在尝试创建一个允许变量赋值的函数,但我不断收到错误: private static void DatabaseSelect(string ToBeSelected, string WhichTab
我认为展示一些经典的 CS 问题并让人们展示他们的算法优化技巧会很有趣。希望我们能够看到一些巧妙的技术来解决我们可以在实践中实现的抽象问题。 理想情况下,解决方案将以具有大 O 分类的伪代码呈现。这种
我是 Java 初学者,陷入了一项任务。如果有人能帮助我,我将非常感激。我有一个具有这些属性的学生类(class) - 姓名、化学分数、数学分数和物理分数。在主课中,我与几个学生创建了一个 Array
我有一个 Java 类 class Student { String name; int age; } 此外,我还有 Student 类 student1 和 student2 的两个
我正在探索 Java 8 功能以从 say Student 对象列表中删除空对象,我有以下代码 import java.util.ArrayList; import java.util.Arrays;
我正在学习 C++,我需要在 C++ 中创建结构“Student”并使用它(我使用 Microsoft Visual C++ 2010 Express) 我创建了Student.cpp文件 #incl
我是一名优秀的程序员,十分优秀!