gpt4 book ai didi

c++ - 友元和运营商=重载

转载 作者:太空宇宙 更新时间:2023-11-04 12:29:18 25 4
gpt4 key购买 nike

所以我一直在尝试过载 += 运算符,但它在类项中不起作用我尝试只使 += 运算符成为 friend ,但它说成员仍然可以访问(注释行) 我的第一个问题是为什么这不起作用,所以我将整个 Order 类作为 friend ,现在它可以访问数据成员但是重载仍然不起作用

这是我的代码:项目类

#pragma once
#include"Order.h"
class Item
{
double Iprice;
public:
friend Order ;
//friend Order& Order::operator+=(Item);
Item(double p =0):Iprice(p){

}

~Item(void);
};

订单类别:

#pragma once
#include"Item.h"
#include<iostream>
using namespace std;
class Order
{
double Oprice;
int n_items;
friend ostream& operator<<(ostream& c , Order O );
public:

Order(double price =0, int n=0 ){
Oprice = price;
n_items = n;
}

Order& operator+=(Item I1){
n_items++;
Oprice += I1.Iprice;

return (*this);
}

};

主要功能:

#include<iostream>
#include"Item.h"
#include"Order.h"
using namespace std;


ostream& operator<<(ostream& c , Order O ){
c<< "Total Price = " << O.Oprice << "-- item Count = " << O.n_items << endl ;

return c ;

}
int main(){

Item t1;
t1 = 1000;

Item t2 = 100;
Item t3 = 10;

Order ord1;

Order ord2;
cout << (ord1 += t1);

}

提前致谢

最佳答案

问题是“Item.h”试图包含“Order.h”,而“Order.h”试图包含“Item.h”,这会造成循环。

Item.h -> Order.h -> Item.h -> Order.h -> ...

这就是为什么类 Item 和 Order 没有正确定义并且编译器在您尝试编译时抛出错误的原因。

要解决此问题,您可以在 Item.h 中转发声明 Object 类,因为您没有在 Item.h 中使用 Order 类,而不仅仅是声明为 friend。前向声明在实际定义实体之前告诉编译器实体的存在。还有一些其他错误,例如没有为 Item 类析构函数定义。我修复了这些,代码如下。

Item.h

class Order;

class Item
{
double Iprice;
public:
friend Order;
Item(double p =0):Iprice(p){

}

~Item()
{
}
};

Order.h

#pragma once
#include"Item.h"
#include<iostream>
using namespace std;

class Order
{
double Oprice;
int n_items;
friend ostream& operator<<(ostream& c , Order O );
public:

Order(double price =0, int n=0 ) {
Oprice = price;
n_items = n;
}

Order& operator+=(Item I1) {
n_items++;
Oprice += I1.Iprice;

return (*this);
}
};

main.cpp

#include<iostream>
//#include "Item.h" // No need to include Item.h here as Order.h in the next line internally includes Item.h
#include "Order.h"
using namespace std;

ostream& operator<<(ostream& c , Order O ){
c<< "Total Price = " << O.Oprice << "-- item Count = " << O.n_items << endl ;

return c ;

}
int main(){

Item t1;
t1 = 1000;

Order ord1;

cout << (ord1 += t1);
}

输出:

Total Price = 1000-- item Count = 1

关于c++ - 友元和运营商=重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59294485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com