0

C ++で複素数のクラスを作成しようとしていますが、クラスのイニシャライザーで奇妙なエラーが発生します。エラーのスクリーンショットは次のとおりです。

ここに画像の説明を入力してください

そしてここに私のコードがあります:

main.cpp:

#include <iostream>
#include "cmath"
#include "Complexx.h"


int main(int argc, const char * argv[])
{

complex c(1,1);
std::cout << c.realPart << "+" <<c.imaginaryPart << "i";
return 0;
}

Complexx.h:

#ifndef Functions_Complexx_h
#define Functions_Complexx_h
#include "cmath"
using namespace std;

class complex {

public:
double imaginaryPart;
double realPart;
complex(double realPart, double imaginaryPart);
double modulus();
};
#endif

私はここで何が間違っているのですか?

4

3 に答える 3

3

問題はここにあります。

complex(double realPart, double imaginaryPart);

コンストラクターを宣言しましたが、定義していません。リンカが不平を言っているのはそのためですundefined symbol complex::complex(double, double)

これはおそらくあなたが望む定義です-これらの2つのパラメータをオブジェクトに保存します。

complex(double realPart, double imaginaryPart)
  : realPart(realPart)
  , imaginaryPart(imaginaryPart)
{ }

これらのパラメータの名前は関係ありません。C ++は、オブジェクトにコピーする必要があるメンバー変数と同じ名前を持っているため、それを推測しません。

于 2013-03-21T15:47:25.797 に答える
2

complex(double, double)宣言は提供されていますが、コンストラクターの定義は提供されていません。これはリンカーが不平を言うことです。

.cppこれをプロジェクト内#includeのヘッダーファイルであるファイルに追加しますcomplexx.h(おそらくcomplexx.cpp):

complex::complex(double realPart, double imaginaryPart)
    :
    realPart(realPart),
    imaginaryPart(imaginaryPart)
{ }

同じ問題が存在する可能性がありdouble modulus()ますが、(まだ)呼び出していないため、リンカーエラーは発行されません。

于 2013-03-21T15:46:56.963 に答える
0

complex(double, double)コンストラクターの定義をリンクしていないようです。Complexx.cppこれは、リンクを忘れた(cppファイルの名前がヘッダーファイルと同じであると想定)か、リンクされたファイル内でコンストラクターを定義するのを完全に忘れたことが原因である可能性がありComplexx.cppます。

main.cppをコンパイルするときにこのg++コマンドを実行するだけです(gccを使用していると仮定します)。

g++ -c Complexx.cpp -o Complexx.o
g++ -c main.cpp -o main.o
g++ main.o Complexx.o -o app
于 2013-03-21T15:46:53.327 に答える