我正在从事一项工作,涉及创建一个申请人的链接列表(作为类存储),每个申请人都有一个ID,等级,年份和一个数值(分数)。我需要编写一个函数,在此列表中搜索得分最高的申请人并将其返回。我能够找到最高的分数,但是我只会返回该值,而不是该特定申请人的整个类(class)。更改代码后,我现在获得4个值(ID,等级,年和分数)中每个值的输出,但是它们都显示0,这是初始化值。这是所有相关代码。
#include <iostream>
#include <fstream>
#include <iomanip>
#include "applicant.cpp"
using namespace std;
struct Linkapp
{
Applicant person;
Linkapp *next;
};
class Linkthem
{
protected:
Linkapp *start;
public:
Linkthem(void);
void link(Applicant);
void printthem(void);
Applicant returnbest(void);
};
Applicant best;
Linkthem::Linkthem()
{
start = NULL;
};
void
Linkthem::link(Applicant one)
{
Linkapp *p;
p = new Linkapp;
p->person = one;
p->next = start;
start = p;
}
Applicant Linkthem::returnbest (void)
{
Linkapp *travel;
travel = start;
best = travel->person;
while (travel != NULL)
{
if (travel->person.return_value() > best.return_value())
best = travel->person;
travel = travel->next;
}
return best;
}
int
main()
{
ifstream infile;
Applicant fellow;
Linkthem mylist;
int id, yrs;
char knowledge;
cout.setf(ios::fixed);
cout.precision(2);
infile.open("applicnt.dat");
while ( !infile.eof() )
{
infile >> id >> knowledge >> yrs;
fellow.store_id(id);
fellow.store_skill(knowledge);
fellow.store_years(yrs);
mylist.link(fellow);
}
mylist.printthem();
cout << best.return_id() << ' ' << best.return_skill() << ' ';
cout << best.return_years() << ' ' << best.return_value() << endl;
fellow = mylist.returnbest();
return 0;
}
并来自“applicant.cpp”
class Applicant
{
protected:
int id;
char skill;
int years;
float value;
void calc_value(void); // <--- NOT for general use, called by return_value
public:
Applicant(void);
void store_id(int);
void store_skill(char);
void store_years(int);
int return_id(void);
char return_skill(void);
int return_years(void);
float return_value(void);
};
问题肯定在我的returnbest函数之内,我不确定在哪里。
最佳答案
由于您似乎不得不编写自己的列表,因此有些提示:
Linkapp似乎是您的类Linkthem的内部细节,因此使其成为私有(private)内部类也不是坏主意。
如果您的列表为空,则returnbest(如果我可以假定类似的实现,则可能是printthem)将失败,并出现分段错误。您需要检查,如果start首先为null:
if(start)
{
// rest of your code
}
else
{
// return some appropriate default
// throw exception
// or whatever else seems appropriate to you
}
您的获取者/设置者的名字很少见。命名有两种主要变体:
int getId(); // or get_id(), but cammel casing is more common these days
void setId(int id);
// vs
int id();
void id(int id);
无需将
Applicant best
用作全局变量。而是将其作为局部变量放置在函数中。现在您的实际问题是:
密切关注您的主要功能-您首先在哪里调用returnbest?写下最佳值(value)之后。这意味着除了默认值以外,您从未分配其他任何值。您必须将
fellow = mylist.returnbest();
放在输出效果最佳的行之前。但是然后使用fellow
而不是best来输出,您可以随意将best
设置为returnbest函数中的局部变量...关于c++ - C++:在链表中查找类的最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36997937/