0

我有一个 C++ 程序,它组织了一堆我想参加的大学课程。它通过从控制台获取输入(包括课程代码、描述等),按专业组织每门课程,然后将其全部输出到格式良好、易于阅读的 HTML 文件中。后来,我计划通过大量研究来缩小名单。

我将每门课程实现为一个对象,当我完成输入信息时,它会添加到一个列表中。当我完成所有信息后,list::sort应该按专业和代码对每门课程进行排序(例如,CSE 380 在 CSE 110 之后,并且都在 ECO 108 之前)。之后的格式化很容易。

要进行排序,我必须实现一个简单的函数,因为即使不这样做在技术上是有效的,我也会收到一个奇怪的错误,我猜是因为我的 Course 类没有“<”运算符。我的功能看起来像这样;

bool courseCompare(Course course1, Course course2) { return course1.getCode() < course2.getCode(); }

返回一个小字符串,其中getCode()包含三字母/数字格式的课程代码(如“AMS 401”)。显然,这是为了便于按字母顺序排列。

我这样称呼 sort 方法;

all_the_courses.sort(courseCompare);

清单在哪里all_the_courses

但是,每当我使用 std::list 时,程序就会停止。不会崩溃,没有输出,当我输入任何内容并按 Enter 时,只是坐在那里没有响应。有任何想法吗?

4

2 回答 2

2

您通过值而不是引用将参数传递给比较函数,因此错误可能出在您的复制构造函数中。编写比较函数的常用方法是使用 const 引用,这避免了完全复制对象:

bool courseCompare(const Course &course1, const Course &course2)
于 2012-01-01T02:28:40.167 回答
1

好的,看来我的做法完全错误。原来我的问题是完全不同的(涉及文件流)。我需要弄清楚它是什么,但这不是排序;一个简单的cout(我真的应该以前用过)揭示了这一点。对不起,大家!

于 2012-01-02T05:37:41.410 回答