首页 > 解决方案 > 重载 << 运算符的问题

问题描述

我目前正在尝试使用运算符重载并构建以下代码

//圆.cpp

//Circle.cpp


#ifndef CIRCLE_H
#define CIRCLE_H


#include "IOD.cpp"
#include<string>

class IOD;  //Forward declaration

class Circle
{
   public:
      void display(IOD& ioDevice) const
      {
           ioDevice<<*this;
      }
};

#endif

//IOD.cpp

//IOD.cpp
#ifndef IOD_H
#define IOD_H

#include <iostream>
#include<string>
#include "Circle.cpp"

class Circle;  //Forward declaration


class IOD
{
    // Interface for displaying CAD objects
public:
    void operator<<(const Circle& c)
    {
        std::cout << "Displaying the object Circle  Using IODevice GraphicsScreen for circles";

    }


};

#endif

//源码.cpp

//Source.cpp
#include <iostream>
#include "Circle.cpp"
#include "IOD.cpp"

int main()
{
    Circle* c1 = new Circle();
    IOD* d1 = new IOD();

    c1->display(*d1);
}

我试图让 Circle 中的显示函数调用 IOD 中的重载运算符 << 以将有关 Circle 对象的输出打印到屏幕上。我的理解是在显示函数中使用“ioDevice<<*this”应该会产生所需的输出。但相反,我收到以下错误

error C2676: binary '<<': 'IOD' does not define this operator or a conversion to a type acceptable to the predefined operator

对此有任何解决方法吗?

标签: c++11operator-overloading

解决方案


您在文件之间具有循环依赖关系:Circle.cpp包含IOD.cpp,反之亦然。

为了使其正常工作,您应该将文件拆分为仅cpp包含API 定义的位置。cpp.h.h

您应该将其#include视为“复制粘贴”。


推荐阅读