我正在为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()’
答案 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;
}