我被指示创建两个类:Customer和Barber, 理发师应该有一个函数:cutHair(),可以在Customer中更改私有成员hairLength的值。
Customer.h
#ifndef CUSTOMER_H
#define CUSTOMER_H
#include "barber.h"
#include <iostream>
#include <string>
using namespace std;
class Customer{
public:
friend void Barber::cutHair(Customer &someGuy);
Customer(string name, double hairLength);
string getName();
double getHair();
void setHair(double newHair);
private:
string name;
double hairLength;
};
#endif
Barber.h
#ifndef BARBER_H
#define BARBER_H
#include <iostream>
#include <string>
#include "customer.h"
using namespace std;
class Customer;
class Barber{
public:
Barber(string barberName);
void cutHair(Customer &someGuy);
private:
string name;
double takings;
};
#endif
barber.cpp 编辑:我更改了cutHair()的实现,以利用友元声明而不是通过公共访问方法访问Customer类的私有成员
#include "barber.h"
#include <string>
Barber::Barber(string barberName){
name = barberName;
takings = 0;
}
void Barber::cutHair(Customer &someGuy){
takings += 18;
someGuy.hairLength = someGuy.hairLength * 80 / 100;
}
customer.cpp中
#include "customer.h"
#include <string>
Customer::Customer(string customerName, double custHairLength){
name = customerName;
hairLength = custHairLength;
}
double Customer::getHair(){
return hairLength;
}
void Customer::setHair(double newLength){
hairLength = newLength;
}
在尝试构建时,我收到错误消息
customer.h(10): error C2653: 'Barber' : is not a class or namespace name
现在正在进行研究并一个接一个地取消问题几天。 希望有人能来救我:)
答案 0 :(得分:3)
这里有循环依赖。您包括来自customer.h的barber.h和来自barber.h的customer.h。
在barber.h中使用
class Customer;
而不是
#include "customer.h"
答案 1 :(得分:0)
在Barber.h
中,您正在声明客户(class Customer;
)并包括#include Customer.h"
。尝试删除包含。当然,您必须在Barber.cpp
答案 2 :(得分:0)
当您在class Customer
中执行Barber.h
之类的前向声明时,只要您不需要,就会告诉编译器您是否在申报时看到客户忽略它的名称知道对象的大小。但是,在您声明CutHair
函数的情况下,您正在使用参数中的实际Customer
对象。如果以某种方式更改代码以将Customer
指针作为参数,并删除包含依赖项,则代码将进行编译。
我还建议,如果您定义了setHair
函数,则不需要友元函数,除非您有充分理由不具备该函数。