0

次のC++プログラムを実行しようとすると:UPDATE(過去のリンクにエラーがあったために更新されたコード):http://pastie.org/private/pdpfpzg5fk7iegnohebtq

私は次のようになります:

ここに画像の説明を入力してください

アップデート

現在発生しているエラーは次のとおりです。

ここに画像の説明を入力してください

それについて何かアイデアはありますか?

ありがとう。

4

6 に答える 6

2

コンストラクター定義の場所をコンパイラーに指示しませんでしたGradeBook(したがって、「未定義の参照」)。すべてのソースファイルを個別にコンパイラに渡すか、すべてのコンパイルユニットの中間オブジェクトファイルを作成して、それらをリンクする必要があります。

事実上、最も簡単な解決策はこれです:

g++ GradeBookMain.cc GradeBook.cc -o GradeBookMain
于 2011-01-26T11:49:13.843 に答える
2

GradeBook.oでリンクしていないため、未定義の参照を取得しています。試す

g++ GradeBookMain.cc GradeBook.cc -o GradeBookMain

GradeBook.hに「maximum」ではなく「maximun」というタイプミスもあります。

于 2011-01-26T11:50:49.877 に答える
1

私のお気に入りのIRCボットの1つを引用すると、未定義の参照はリンカーエラーです。コンパイルエラーではありません。#includesは役に立ちません。エラーメッセージで物事を定義しなかった、それを定義するファイルをリンクするのを忘れた、それを定義するライブラリにリンクするのを忘れた、または静的ライブラリの場合、リンカーコマンドラインで間違った順序になっている。どれを確認してください。

于 2011-01-26T11:48:54.167 に答える
1

C++では大文字と小文字が区別されます。したがって、たとえばdisplayMessageを使用できますが、定義するのはDisplayMessageです。これらは2つの異なる機能です。DisplayMessageの定義をdisplayMessageに変更するか、それを呼び出すときにdisplayMessageではなくDisplayMessageを呼び出す必要があります

于 2011-01-26T11:51:28.393 に答える
1

コンパイラが教えてくれるのは、GradeBookクラスが定義されており、コンパイル段階ではすべて問題ないということですが、完全な実行可能プログラムをリンクするときは、そのクラスの実際のコードを見つけることができません。これは、GradeBook.ccではなくGradeBookMain.ccのみをコンパイルしてリンクしたためです。次のように、両方を同時にコンパイルしてリンクすることができます。

g++ GradeBookMain.cc GradeBook.cc -o program

または、それらを個別にコンパイルしてから、一緒にリンクすることもできます。

g++ -c GradeBookMain.cc -o GradeBookMain.o
g++ -c GradeBook.cc     -o GradeBook.o
g++ GradeBookMain.o GradeBook.o -o program
于 2011-01-26T11:53:56.173 に答える
0

GradeBook.ccでもコンパイルする必要があります。

現時点では、クラス自体がコンパイルまたはリンクされていないため、リンカはGradeBookクラスを見つけることができず、文句を言います。

于 2011-01-26T11:51:47.003 に答える