Blue という C++ クラスを作成し、そのクラス内void drawblueline()
に I'm new to Programming という関数を作成しましたが、これをコマンド ラインで次のように記述して呼び出すと考えました。
int main( )
{
Blue blue;
blue.drawblueline();
}
呼び出し方に問題がなければ、2 つのリンカ エラーが発生しblue.draw..
ます。関数に間違いがあるのではないでしょうか?
Blue という C++ クラスを作成し、そのクラス内void drawblueline()
に I'm new to Programming という関数を作成しましたが、これをコマンド ラインで次のように記述して呼び出すと考えました。
int main( )
{
Blue blue;
blue.drawblueline();
}
呼び出し方に問題がなければ、2 つのリンカ エラーが発生しblue.draw..
ます。関数に間違いがあるのではないでしょうか?
アプリケーションを実行する前に、必要なすべてのヘッダー ファイルを main.cpp ファイルに含め、すべての依存関係 (.cpp ファイル) をコンパイルおよびリンクしたことを確認してください。
たとえば、First.cpp と Second.cpp と Main.cpp という名前の 2 つのファイルがあるとします。最初に First.cpp をコンパイルし、Second.cpp をコンパイルしてから Main.cpp をコンパイルし、それらをリンクしてすべての参照を解決する必要があります。
Ubuntu または同様の OS を使用している場合、この行はコンパイルとリンクを同時に行います。
g++ First.cpp Second.cpp Main.cpp -o Bluerectangle
上記の行は、すべてのファイルをコンパイルしてからリンクし、 Bluerectangleという名前のオブジェクト ファイルを作成します。
実行するには、ターミナルでBluerectangleと入力します。
somefile.cpp にクラス メソッドを実装し、プログラムが otherfile.cpp にある場合は、.cpp でコンパイルする必要がありますg++ somefile.cpp otherfile.cpp ...
。
リンカー エラーは、必要なすべてのヘッダーを含めたが、一部の関数の定義をコンパイルしなかったことを意味します。
より複雑なプロジェクトをコンパイルする最良の方法は、Makefile を使用することです。
メイクファイルの例:
all: main
main: main.cpp blue.o
g++ main.cpp blue.o -o main
blue.o: blue.cpp blue.h
g++ blue.cpp -c -o blue.o
次に、コマンドでプロジェクトをコンパイルできますmake
この makefile は、プロジェクトには main が必要であり、main は main.cpp と blue.o に依存することを示しています。したがって、 main.cpp または blue.o が実際のものでない場合、それらの両方を作成してから、コマンドでメインにしようとしg++ main.cpp blue.o -o main
ます。
次に、blue.o は blue.cpp と blue.h に依存します。Blue は、オブジェクト ファイル blue.o にコンパイルされます。