我被指示创建两个类:Customer 和 Barber, Barber 应该有一个函数:cutHair() 可以改变 Customer 中私有(private)成员 hairLength 的值。
客户.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
理发师.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() 的实现以利用友元声明,而不是通过它的公共(public)访问器方法访问类 Customer 的私有(private)成员
#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;
}
客户.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
几天来一直在研究和取消一个接一个的问题。 希望有人能来救我:)
最佳答案
你在这里有循环依赖。您包括 customer.h 中的 barber.h 和 barber.h 中的 customer.h。
在barber.h中使用
class Customer;
代替
#include "customer.h"
关于两个单独文件之间的 C++ 友元函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7316513/