复数类C ++的主要功能

时间:2014-12-17 15:43:21

标签: c++

我正在为C ++工作,我对这门语言很新。该任务是关于为具有复杂根的函数实现Newton Raphson方法。我已经实现了代码。

我想现在测试我的代码,我很难让我的主要功能正常工作,有些概念我不理解会导致我的错误实现。我会很感激一些解释,所以我可以更好地理解。感谢。

这是我的代码示例:

Complex.h

#include<iostream>
#include<cmath>

using namespace std;

class Complex {
    private:
    double r;
    double i;

    public:
    Complex(double real, double imaginary);
    friend Complex operator+(const Complex& c1, const Complex& c2);
    friend ostream& operator<<(ostream& outs, const Complex& number);       
};

Complex.cpp

#include "testComplex.h"

Complex::Complex(double real = 0.0, double imaginary = 0.0) : r(real), i(imaginary) {}
Complex operator+(const Complex& c1, const Complex& c2) {
    Complex result;
    result.r = c1.r + c2.r;
    result.i = c1.i + c2.i;
    return result;
}

的main.cpp

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

using namespace std;

int main () {
    Complex x;
    Complex y;
    Complex sum;
    x = Complex(2, 4);
    y = Complex(3, 0);
    sum = x + y;
    cout << "The sum (x + y) is:  " << sum << endl;
    return 0;
}

这是我收到的错误的一部分:

testComplexmain.cc: In function ‘int main()’:
testComplexmain.cc:8:10: error: no matching function for call to ‘Complex::Complex()’
testComplexmain.cc:8:10: note: candidates are:
testComplex.h:15:2: note: Complex::Complex(double, double)
testComplex.h:15:2: note:   candidate expects 2 arguments, 0 provided
testComplex.h:8:7: note: Complex::Complex(const Complex&)
testComplex.h:8:7: note:   candidate expects 1 argument, 0 provided
testComplexmain.cc:9:10: error: no matching function for call to ‘Complex::Complex()’

2 个答案:

答案 0 :(得分:6)

您没有默认构造函数。双参数构造函数可以用作一个,因为两个参数都是可选的;但是你必须在标题中的声明中放置默认参数,而不是源文件中的定义,以便可以从main使用它们。

就个人而言,我会使用std::complex而不是重新发明它。

答案 1 :(得分:1)

您没有默认构造函数,因为您将默认参数放在定义中,因此您只能通过传递两个参数来构造Complex个实例。

您可以添加默认构造函数

Complex() : r(0), i(0) {}

或将默认参数放在函数声明中而不是在定义

Complex(double real = 0.0, double imaginary = 0.0);

或者像这样编写代码:

int main () {
    Complex x(2, 4);
    Complex y(3, 0);
    Complex sum = x + y;
    cout << "The sum (x + y) is:  " << sum << endl;
    return 0;
}