-1

Blue という C++ クラスを作成し、そのクラス内void drawblueline() に I'm new to Programming という関数を作成しましたが、これをコマンド ラインで次のように記述して呼び出すと考えました。

int main( )
{

Blue blue; 
blue.drawblueline();
}

呼び出し方に問題がなければ、2 つのリンカ エラーが発生しblue.draw.. ます。関数に間違いがあるのではないでしょうか?

4

2 に答える 2

1

アプリケーションを実行する前に、必要なすべてのヘッダー ファイルを 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と入力します。

于 2013-07-26T09:08:43.887 に答える
1

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 にコンパイルされます。

于 2013-07-26T08:05:21.993 に答える