Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于复数的友元函数_C++_Oop_C++11_Friend - Fatal编程技术网

C++ 关于复数的友元函数

C++ 关于复数的友元函数,c++,oop,c++11,friend,C++,Oop,C++11,Friend,我试图通过使用友元函数和构造函数来初始化值来添加2个复数,但得到错误“未定义对complex1::complex1()的引用”,有人能告诉我哪里出错了 #include<iostream> using namespace std; class complex1 { float real,img; public: complex1(); complex1(float a,float b) { real=a; img=b;

我试图通过使用友元函数和构造函数来初始化值来添加2个复数,但得到错误“未定义对complex1::complex1()的引用”,有人能告诉我哪里出错了

#include<iostream>
using namespace std;

class complex1
{
    float real,img;
public:
    complex1();
    complex1(float a,float b)
    {
        real=a;
        img=b;
    }
    friend complex1 sum(complex1,complex1);
    friend void display(complex1);
};

complex1 sum(complex1 c1,complex1 c2)
{
    complex1 c3;
    c3.real=c1.real+c2.real;
    c3.img=c1.img+c2.img;
    return c3;
}

void display(complex1 c)
{
    cout<<c.real<<"+j"<<c.img;
}

int main()
{
    complex1 c1(100.9,200.9);
    complex1 c2(50.9,50.9);
    complex1 c=sum(c1,c2);
    display(c);     //display and sum is given directly because it is friend
    return 0;
}
#包括
使用名称空间std;
类complex1
{
浮动实数,img;
公众:
complex1();
复合体1(浮点数a、浮点数b)
{
real=a;
img=b;
}
朋友complex1和(complex1,complex1);
好友无效显示(complex1);
};
complex1和(complex1 c1,complex1 c2)
{
复合物1-c3;
c3.实数=c1.实数+c2.实数;
c3.img=c1.img+c2.img;
返回c3;
}
无效显示(复杂1 c)
{

cout这与您的
friend
函数的友好性无关。您声明了一个构造函数:

complex1();
complex1() {
   //do something
}
但您从未定义它。然后在
complex1 c3;
中的
sum
中使用它。您需要定义默认构造函数:

complex1();
complex1() {
   //do something
}

complex1 c=sum(c1,c2);
您正在使用默认构造函数构造
c
,该构造函数在您的类中没有实现(
complex1();
)。然后,您在函数
sum
中使用它。此外,您使用的
运算符=
complex1
类型没有定义。@Fureeish
运算符=
不是什么大问题,这将由编译器创建,因为不需要定义复制构造函数或析构函数,所以它们没有违反3的规则。@FanTasICMrFox正确。将保留评论,尽管内容是“代码>复杂的()/代码>函数(构造函数)的内容。如果您的类已经覆盖C++引用(<代码>和代码>),您应该在参数列表中使用它们。