2012-01-01 5 views
0

私は、私が受けたいと思っている大学のコースをまとめたC++のプログラムを持っています。コンソールからの入力(コースコード、説明など)を入力し、各コースをメジャーで編成してから、すべてをきれいにフォーマットされた読みやすいHTMLファイルに出力します。後で、私は多くの研究でリストを間引くことを計画しています。std :: list :: sortの使い方が私のプログラムをハングします

各コースをオブジェクトとして実装します。これは、情報の入力が完了するとリストに追加されます。すべての情報が完成したら、list::sortは、各コースをメジャーとコードでソートする必要があります(例:CSE 380はCSE 110の後に来て、ECO 108の前に来る)。その後の書式設定は簡単です。

ソートするには、技術的に有効ではないにもかかわらず、奇妙なエラーが発生するので、単純な関数を実装する必要があります。私はCourseクラスの '<'演算子がないためです。私の機能はこのように見えます。

getCode()は(「AMS 401」のような)三文字/数字形式でコースコードを保持している小さな文字列を返す
bool courseCompare(Course course1, Course course2) { return course1.getCode() < course2.getCode(); } 

。これは明らかにアルファベット順を容易にするためのものです。

私はsoメソッドを呼び出します。 all_the_courses

all_the_courses.sort(courseCompare);

リストです。

しかし、私がstd :: listを使用するたびに、プログラムはただ停止します。クラッシュしない、出力しない、何かを入力してEnterを押したときに応答しない。何か案は?

+1

待機、C++をスクリプトに使用していますか?別のプログラミング言語の使用を検討してください。 – orlp

+1

私はあなたのコンパレータが_厳格な弱い注文を実装していないと思います。プロセスに侵入してデバッガで調べるとどうなりますか? –

+0

@Tomalak: 'course1.getCode() Xeo

答えて

1

OK、それはそうです。私の問題はまったく違うものであることがわかります(ファイルストリームを含む)。私はそれが何であるか把握する必要がありますが、それはソートではありません。単純なcout(これは私が以前に使用していたはずのものです)では明らかです。申し訳ありません、みんな!

+0

注:最初に成功しない場合は、Boostライブラリがあるかどうかを確認してください。 – JesseTG

2

パラメータは、参照ではなく値によって比較関数に渡されます。そのため、エラーがコピーコンストラクタにある可能性があります。比較関数を記述する通常の方法は、完全にオブジェクトのコピーを回避するのconst参照である:私はこれについて完全に間違った道を進んでいたよう

bool courseCompare(const Course &course1, const Course &course2) 
+0

助けてくれないようです。私はちょうどこれを得る;/home/jesse /デスクトップ/コードプロジェクト/ C++/Stony Brookコースオーガナイザ/ Stony Brookコースオーガナイザ/ main.cpp | 11 | error: 'Course :: getCode()const'の呼び出しで一致する関数がありません。文字列に '<'がすでに定義されていませんか? – JesseTG

+0

'const'に関連するコンパイラエラーを回避するには、 'const'を 'bool courseCompare(Course&course1、Course&course2)'の定義 – hackworks

+1

@arrogantcとして削除してください。問題は '<'ではなく、 'getCode'オブジェクトを変更しないので 'const'関数として宣言する必要があります。すべてのアクセサーは、関数パラメーターの閉じ括弧の直後に 'const'を置くことによって' const'関数として宣言されるべきです。 –

関連する問題