2011-01-26 10 views
0

私は、次のC++プログラムを実行しようとすると:UPDATE(過去リンクは多少の誤差があったので、更新されたコード):http://pastie.org/private/pdpfpzg5fk7iegnohebtqUPDATE:C++未定義参照

を、私は次を得る:

enter image description here

UPDATE

次のようになりまし発生しているエラー:

enter image description here

これに関するアイデアはありますか?

ありがとうございました。

+0

あなたのコードにtabificationのいくつかのフォームを追加してください。今読むのは苦しいです。また、GradeBookクラス定義とリンカエラーを引き起こす行だけをこの質問に追加できるので、潜在的な回答者が問題の詳細情報を得るためにリンクをクリックする必要がなくなります。 –

+1

(1)あなたのコードを_here_に投稿してください。私たちがあなたのコードを見つけて読むのを難しくすることは役に立ちません。 (2)あなたのコンピュータでコピー&ペーストはできませんか?スクリーンショットを投稿した理由はありますか? @James McNellis。 –

+0

質問を掲示している間に、スクリーンショットをペストリーに貼り付けることについては考えていませんでした。ありがとう。 – Simplicity

答えて

2

。 ます。またGradeBook.h

に代わりに "最大" のタイプミス "する最大の" を持っている

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

+0

あなたは正しいです。解決済み。 – Simplicity

1

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

2

GradeBookのコンストラクタ定義(つまり「未定義参照」)がどこにあるかをコンパイラに通知しませんでした。すべてのソースファイルを別々にコンパイラに渡すか、すべてのコンパイル単位の中間オブジェクトファイルを作成してリンクする必要があります。

事実上、最も簡単な解決策はこれです:あなたはundefefined参照を取得しているので、あなたはGradeBook.oにリンクしていない

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

「すべてのコンパイルユニットの中間オブジェクトファイルを作成し、それらをリンクさせる」と言ったら、どうすればいいですか? – Simplicity

1
を試してみてください

C++は、大文字と小文字が区別されます。たとえば、displayMessageを使用できますが、定義する内容はDisplayMessageです。それらは2つの異なる機能です。 DisplayMessageの定義をdisplayMessageに変更するか、それを呼び出すときにdisplayMessage not displayMessage

0

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

現在、クラス自体はコンパイルまたはリンクされていないため、リンカーはGradeBookクラスを見つけることができません。

1

GradeBookクラスが定義されており、コンパイル段階ですべてがOKですが、完全な実行可能プログラムをリンクするときは、そのクラスの実際のコードを見つけることができません。 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