私は、次のC++プログラムを実行しようとすると:UPDATE(過去リンクは多少の誤差があったので、更新されたコード):http://pastie.org/private/pdpfpzg5fk7iegnohebtqUPDATE:C++未定義参照
を、私は次を得る:
UPDATE
次のようになりまし発生しているエラー:
これに関するアイデアはありますか?
ありがとうございました。
私は、次のC++プログラムを実行しようとすると:UPDATE(過去リンクは多少の誤差があったので、更新されたコード):http://pastie.org/private/pdpfpzg5fk7iegnohebtqUPDATE:C++未定義参照
を、私は次を得る:
UPDATE
次のようになりまし発生しているエラー:
これに関するアイデアはありますか?
ありがとうございました。
。 ます。またGradeBook.h
に代わりに "最大" のタイプミス "する最大の" を持っているg++ GradeBookMain.cc GradeBook.cc -o GradeBookMain
あなたは正しいです。解決済み。 – Simplicity
お気に入りのIRCボットの1つを引用してください:未定義の参照はリンカーエラーです。コンパイルエラーではありません。 #includesは役に立たない。エラーメッセージの中に定義していない、定義したファイルをリンクするのを忘れた、定義したライブラリへのリンクを忘れてしまった、または静的ライブラリの場合はリンカーのコマンドラインに間違った順序がある。どちらをチェックしてください。
GradeBook
のコンストラクタ定義(つまり「未定義参照」)がどこにあるかをコンパイラに通知しませんでした。すべてのソースファイルを別々にコンパイラに渡すか、すべてのコンパイル単位の中間オブジェクトファイルを作成してリンクする必要があります。
事実上、最も簡単な解決策はこれです:あなたはundefefined参照を取得しているので、あなたはGradeBook.oにリンクしていない
g++ GradeBookMain.cc GradeBook.cc -o GradeBookMain
「すべてのコンパイルユニットの中間オブジェクトファイルを作成し、それらをリンクさせる」と言ったら、どうすればいいですか? – Simplicity
C++は、大文字と小文字が区別されます。たとえば、displayMessageを使用できますが、定義する内容はDisplayMessageです。それらは2つの異なる機能です。 DisplayMessageの定義をdisplayMessageに変更するか、それを呼び出すときにdisplayMessage not displayMessage
また、GradeBook.ccでコンパイルする必要があります。
現在、クラス自体はコンパイルまたはリンクされていないため、リンカーはGradeBookクラスを見つけることができません。
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
あなたのコードにtabificationのいくつかのフォームを追加してください。今読むのは苦しいです。また、GradeBookクラス定義とリンカエラーを引き起こす行だけをこの質問に追加できるので、潜在的な回答者が問題の詳細情報を得るためにリンクをクリックする必要がなくなります。 –
(1)あなたのコードを_here_に投稿してください。私たちがあなたのコードを見つけて読むのを難しくすることは役に立ちません。 (2)あなたのコンピュータでコピー&ペーストはできませんか?スクリーンショットを投稿した理由はありますか? @James McNellis。 –
質問を掲示している間に、スクリーンショットをペストリーに貼り付けることについては考えていませんでした。ありがとう。 – Simplicity