あなたの教授は、professor_main.ccなどの他のファイルを持っている可能性が高く、プロジェクトを次のようにコンパイルします。
g++ example.cc professor_main.cc -o project
彼らのprofessor_main.ccには行があります
#include "example.h"
また、いくつかの関数を使用し、それらが正しいことを行っていることをテストする可能性があります。
std::cout << (example_add(2,3) == 5) ? "good" : "bad" << std::endl;
ここで、example.h を #include しなかった場合、またはそのファイルを正しく作成しなかった場合、professor_main.cc でコンパイル エラーが発生します。ヘッダー ファイルにある必要があり、このエラーを解消する重要な行は次のとおりです。
int example_add(int a, int b);
これを関数宣言と呼びます。
ヘッダーですべてが正しく行われているのに、教授が間違って example.cc なしでプロジェクトをコンパイルしようとした場合、次のようになります。
g++ professor_main.cc -o project
次に、example_add() への「未定義の参照」に関するリンカエラーが発生します。
欠けているのは関数定義です:
int example_add(int a, int b) { return a + b; }
これは example.cc ファイルにあるはずです。教授がそれをコンパイル コマンド ラインに含めていれば、すべて問題ないはずです。
ただし、ヘッダーファイルに「example.cc」を #include した場合、すべてがうまくいきません。事実上、example.cc をコピーして、professor_main.cc に貼り付けることができます。これはそこに #include されているためです。しかし、それは明らかに独自のファイル、example.cc にもあります。あなたの教授がこれをやろうとした場合:
g++ example.cc professor_main.cc -o project
関数 example_add() が2 回定義されているため、リンカーから複数定義エラーが発生します。
一般的には、すべての関数定義をソース ファイル (.cc) に配置し、すべての関数宣言をヘッダー ファイル (.h) に配置することをお勧めします。別の .cc ファイルを自分でコンパイルしてみて、どのように機能するかを確認してください。