前提・実現したいこと
C++で複素数クラスを実装しながら、C++のクラスやポインタを理解したい。
発生している問題・エラーメッセージ
C++初心者です。複素数の加減乗除を行うプログラムを書きました。
プログラム上のコンストラクタのコメントアウトを外すと想定通り動作するのですが、コメントアウトするとコンパイルが通らず以下のエラーメッセージが出ます。
プログラム上ではComplex::Complex(double a, double b)のコンストラクタのみを使用しており、、Complex::Complex(Complex* c)を呼び出していないにも関わらず、なぜか削除するとコンパイルが通らないです。なぜこのようなことが起きるのでしょうか。
05:22:31 **** Incremental Build of configuration Debug for project Math **** Info: Internal Builder is used for build g++ -O0 -g3 -Wall -c -fmessage-length=0 -o Complex.o "..\Complex.cpp" g++ -o Math.exe Complex.o Complex.o: In function `ZN7ComplexcoEv': D:\Documents\cpp\Math\Debug/../Complex.cpp:31: undefined reference to `Complex::Complex(Complex*)' Complex.o: In function `ZN7ComplexplES_': D:\Documents\cpp\Math\Debug/../Complex.cpp:32: undefined reference to `Complex::Complex(Complex*)' Complex.o: In function `ZN7ComplexmiES_': D:\Documents\cpp\Math\Debug/../Complex.cpp:33: undefined reference to `Complex::Complex(Complex*)' Complex.o: In function `ZN7ComplexmlES_': D:\Documents\cpp\Math\Debug/../Complex.cpp:34: undefined reference to `Complex::Complex(Complex*)' Complex.o: In function `ZN7ComplexmlEd': D:\Documents\cpp\Math\Debug/../Complex.cpp:35: undefined reference to `Complex::Complex(Complex*)' Complex.o:D:\Documents\cpp\Math\Debug/../Complex.cpp:38: more undefined references to `Complex::Complex(Complex*)' follow collect2.exe: error: ld returned 1 exit status 05:22:32 Build Finished (took 641ms)
該当のソースコード
#Complex.cpp
#include "Complex.h" #include <stdio.h> #include <math.h> #include <string.h> Complex::Complex() { this->a=0; this->b=0; } //ここのコメントアウトを外すとコンパイルが通る。 //Complex::Complex(Complex* c) { // this->a=c->a; // this->b=c->b; //} Complex::Complex(double a) { this->a=a; this->b=0; } Complex::Complex(double a, double b) { this->a=a; this->b=b; } Complex::~Complex() {} Complex Complex::operator ~(){return new Complex(this->a, -this->b);} Complex Complex::operator +(Complex c){return new Complex(this->a+c.a, this->b+c.b);} Complex Complex::operator -(Complex c){return new Complex(this->a-c.a, this->b-c.b);} Complex Complex::operator *(Complex c){return new Complex(this->a*c.a - this->b*c.b, this->a*c.b + this->b*c.a);} Complex Complex::operator *(double v){return new Complex(this->a*v, this->b*v);} Complex Complex::operator /(Complex c){ double v=c.abs2(); return new Complex((this->a*c.a+this->b*c.b)/v, (this->b*c.a-this->a*c.b)/v); } Complex Complex::operator /(double v){return new Complex(this->a/v, this->b/v);} double Complex::abs2(){return this->a*this->a+this->b*this->b;} double Complex::abs(){return sqrt(this->abs2());} int main(){ Complex a=new Complex(3, 2); Complex b=new Complex(1, 7); Complex c=(a+b)*b; printf("(%02f, %02f)\n", c.a, c.b); }
#Complex.h
/* * Complex.h * * Created on: 2021/02/22 * Author: goki0 */ #ifndef COMPLEX_H_ #define COMPLEX_H_ class Complex { public: double a, b; Complex(); Complex(Complex* c); Complex(double a); Complex(double a, double b); virtual ~Complex(); Complex operator ~(); Complex operator+(Complex c); Complex operator-(Complex c); Complex operator*(Complex c); Complex operator*(double v); Complex operator/(Complex c); Complex operator/(double v); double abs2(); double abs(); }; #endif /* COMPLEX_H_ */
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。