【发布时间】:2021-01-05 10:50:23
【问题描述】:
给定 2 个类 class Euro 和 class Dollar
我已经重载了赋值运算符,所以相同类型的对象可以互相传递它们的私有值。
MRE:
#ifndef EURO_H
#define EURO_H
#include <iostream>
#include <iomanip>
#include "Dollar.h"
class Euro
{
public:
Euro();
~Euro();
Euro(int temporary);
Euro(const Euro &object);
Euro operator = (const Euro &other);
friend std::ostream & operator << (std::ostream &os, const Euro &object);
private:
double euro;
};
#endif // EURO_H
&
#ifndef DOLLAR_H
#define DOLLAR_H
#include <iostream>
#include <iomanip>
#include "Euro.h"
class Dollar
{
public:
Dollar();
~Dollar();
Dollar(int temporary);
Dollar(const Dollar &object);
Dollar operator = (const Dollar &other);
friend std::ostream & operator << (std::ostream &os, const Dollar &object);
private:
double dollar;
};
#endif // DOLLAR_H
现在我试图定义将欧元类型的对象分配给美元类型的对象时欧元转换为美元的行为,反之亦然。
但是,当声明另一个赋值运算符时,例如 Euro operator = (const Dollar &object),即使我包含了 Dollar.h 文件,它也不知道 Dollar 类型。
为什么会这样?如何在不声明两个类friend的情况下实现这一点?
【问题讨论】:
-
也许使用前向声明。请发送minimal reproducible example
-
请发帖minimal reproducible example。我的猜测是你有循环依赖,但是我们需要看代码
-
btw
operator=应该返回引用而不是*this的副本。 -
这仍然无法重现。
Dollar.h在哪里?
标签: c++ class member assignment-operator