C++ 将对象指定给不同类的对象
给定2类C++ 将对象指定给不同类的对象,c++,class,member,assignment-operator,C++,Class,Member,Assignment Operator,给定2类欧元类和美元类 我重载了赋值运算符,所以相同类型的对象将它们的私有值传递给彼此 MRE: #如果不使用欧元# #定义欧元 #包括 #包括 #包括“美元.h” 欧元级 { 公众: 欧元(); ~Euro(); 欧元(临时国际贸易); 欧元(const Euro&object); 欧元运算符=(常数欧元和其他); friend std::ostream&operator您很可能面临两个类之间的循环依赖问题 您的欧元类包含“Dollar.h”,而您的美元类很可能包含“Euro.h”。其中一个包
欧元类
和美元类
我重载了赋值运算符,所以相同类型的对象将它们的私有值传递给彼此
MRE:
#如果不使用欧元#
#定义欧元
#包括
#包括
#包括“美元.h”
欧元级
{
公众:
欧元();
~Euro();
欧元(临时国际贸易);
欧元(const Euro&object);
欧元运算符=(常数欧元和其他);
friend std::ostream&operator您很可能面临两个类之间的循环依赖问题
您的欧元类包含“Dollar.h”,而您的美元类很可能包含“Euro.h”。其中一个包含将被包含防护(ifdef
/pragma once
)阻止。只有一个会显示在另一个之上,它们不能同时出现在另一个之上
解决方案是使用转发声明
加:
高于欧元等级,反之亦然
前向声明的类型现在被认为是一个不完整的类型-编译器可以在看到它的实际声明之前使用它,但仅用于特定用途:前向声明有助于在函数签名中使用类,并有助于拥有此类型的指针或引用成员,但不帮助拥有实际值类型成员或for在头中实现的需要知道“完整类型”的方法
如果您在使用不完整类型时出错:如果是在使用不完整类型的函数实现上,请将函数实现移动到您的cpp文件,其中已包含两个标头,并且编译器将该类型视为完整类型。可能使用转发声明。请发布一个。我猜是您有一个循环依赖项,但我们需要看到codebtw运算符=
应该返回一个引用,而不是*this
的副本。这仍然是不可复制的。美元.h
在哪里?
#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
class Dollar; // forward declare class Dollar to allow using it