Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将对象指定给不同类的对象_C++_Class_Member_Assignment Operator - Fatal编程技术网

C++ 将对象指定给不同类的对象

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”。其中一个包

给定2类
欧元类
美元类

我重载了赋值运算符,所以相同类型的对象将它们的私有值传递给彼此

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