所以我一直在尝试超载+ =运算符,但在类项中却无法正常工作,我只想让+ =运算符成为 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类,而只是声明为好友。前向声明在实际定义实体之前将其存在告知编译器。还有其他一些错误,例如没有对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