c++ - 如何在类构造函数和重载运算符中创建不同的类对象(C++)

标签 c++ class

我需要你的帮助。我是 C++ 的新手(仍在学习),我在使用包含来自不同类的对象的类构造函数时苦苦挣扎。任务是创建将由对象(Point 类)描述的 Rectangle 类,每个角都是一个具有 x,y 坐标的对象。此外,在构造函数创建 Rectangle 对象期间,我需要通过“>>”用户输入每个点的坐标的方式重载运算符 << 和 >>。 当我使用如下代码时,在 p1 到 p4 的字段上出现错误“不完整类型是不允许的”。

列表项

    #include <iostream>

using namespace std;

class Point;
class Rectangle
{
public:
    Rectangle(int p1x = 0, int p1y = 0, int p2x = 0, int p2y = 0, int p3x = 0, int p3y = 0, int p4x = 0, int p4y = 0) : p1(p1x, p1y), p2(p2x, p2y), p3(p3x, p3y), p4(p4x, p4y) 
    {

    };

    friend ostream & operator << (ostream &os, const Rectangle &rect);

private:
    Point p1, p2, p3, p4;
    void change_cordinates(Rectangle &);
    int height, width;
};"

另一方面,当我使用#include "Point.h"指令时,我遇到了重载 << 和 >> 的问题,并出现错误“函数矩形不是类型名称”

我不知道是否清楚,但我希望我能清楚地描述我的问题(如果不正确,请纠正我或询问)

最佳答案

正如评论中已经提到的那样:您必须确保类型在使用时是“完整的”。

在您的示例中,通过将它们添加为成员变量来使用它们。 您可以通过持有指向它们的指针(而不是成员)来解决这个问题 - 但这很可能是一个坏主意,因为您随后必须关心内存分配/取消分配。

可能是最好的解决方案:包含“Point.h”并修复您的 >> 和 << 运算符。

关于c++ - 如何在类构造函数和重载运算符中创建不同的类对象(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43126135/

相关文章:

c++ - 未在 C++ 中打开时是否允许写入 ofstream

C#:使用包含它的类使字段只能修改

java - java.lang.Class.getResources的使用

c++ - 如何转发声明从转发声明的模板基类派生的类?

Java 行号表 : Entry explanation

c++ - 计算 Point2D<UCS> 和 Point2D<GCS> 之间的差异

c++ - 如何从 C/C++ 不带控制台窗口执行批处理文件?

c++ - C++ 中的数组和函数

Python 类和 __iter__

c++ - boost::multiprecision 从整数转换为 cpp_dec_float 编译错误