2017-10-24 7 views
0

非常に単純なコードスニペットを実行しようとしています。私はリンカエラーを取得しています。私のコードのようになります。シンプルなC++コードリンカーエラー

main.cppに - >

#include <iostream> 
#include "Complex.h" 

using namespace std; 

int main() 
{ 
    Complex c1(1.0, 5.0); // this should create Complex object 1.0 + i5.0 
    return 0; 
} 

のcomplex.h - >

#include <iostream> 

class Complex { 
private: 
    double real; 
    double imaginary; 

public: 
    Complex(double, double); 
    void setReal(double); 
    void setImaginary(double); 

}; 

Complex.cpp - >

#include "Complex.h" 
#include <cmath> 

Complex::Complex(double x, double y) { 
    setReal(x); 
    setImaginary(y); 
} 
void Complex::setReal(double x) { 
    real = x; 
} 
void Complex::setImaginary(double x) { 
    imaginary = x; 
} 

私はこのようになっています。Error photo

私はメインをしばらく実行しようとしていましたが、リンカエラーが発生しています。何が原因なのかわからない。私は何か提案を感謝します。

+1

あなたは 'Complex.cpp'をコンパイルまたはリンクしていません。 –

答えて

2

ちょうど

g++ main-3.cpp complex.cpp 

心にメイン-3ファイル名を行い、これはあなたの質問では矛盾しています。 使用しているすべてのcppファイルをg ++コマンドラインに入力して、ヘッダーに定義されている関数のコードがどこにあるのかをg ++に伝える必要があります。 .oファイルを読んで静的リンクを作り、その意味を理解してください。ここで

私はファイルのインクルードやその他の要因

C++(またはg ++)を理解するために従ってください少しのガイドラインですmoronically簡単です:

  1. 読み取り.cppファイル
  2. ておきの#include文を置き換えます
  3. 結果のテキストにまだ#includeディレクティブが含まれている場合(ヘッダーファイルから取得)、手順2に進みます。
  4. Comp hughe messy blobを '.o'オブジェクトファイルに置き換え、関数呼び出しをシンボルに置き換え、既知のシンボルのテーブルとそれらが定義されている場所をそのファイルに追加します。
  5. .cppファイルがさらに指定されている場合は、新しい空のテキストブロブを開始します。手順1に進みます。
  6. すべてのオブジェクトファイルをリンクするリンカー 'ld'を呼び出し、シンボルを実際のアドレスに置き換えます。

厳密に言えば、上記はちょっとした嘘であり、多くは除外されており、最適化は言及されていません。しかし、コンパイラの動作にはまだ役立つガイドです。

あなたのエラーを解釈するためにそれを使用するには: Complex.hmain.cpp#includeを経由して、あなたのブロブにダンプが、Complex.cppはしませんでしたしまいました。 G ++

PUT 1.0 on Stack 
PUT 5.0 on Stack 
JUMP Complex::Complex 

の線に沿って何かを含んであなたのための内部の一時.oファイルを生成...そしてその.oファイルとリンカ'ld'を走りました。 ldシンボルComplex :: Complexのアドレスが見つかりませんでした。 ジャンプ先のメモリアドレスが必要です。 Complex.cppも同様にコンパイルすると、結果のComplexが生成されます。

Complex::Complex = 0xaaff 

リンカは、与えられたComplex.oは現在アドレスでmain.o内のシンボルを置き換えることができます。o、たとえば、このエントリを持つシンボルテーブルを持っています。

PUT 1.0 on Stack 
PUT 5.0 on Stack 
JUMP 0xaaff 
関連する問題