Проблемы с перегрузкой оператора << - PullRequest
0 голосов
/ 06 апреля 2020

В настоящее время я пытаюсь обойти проблему с перегрузкой оператора и построил следующий код

// Круг. 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

// Source. 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 "внутри функции отображения должно привести к желаемому результату. Но вместо этого я получаю следующую ошибку </p>

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

Есть ли обходные пути к этому?

1 Ответ

0 голосов
/ 06 апреля 2020

У вас есть круговая зависимость между файлами: Circle.cpp включает в себя IOD.cpp и наоборот.

Чтобы все работало нормально, вы должны разбить ваши cpp файлы на cpp и .h где .h будет включать только определения API.

Вы должны думать о #include как о "копировании-вставке".

...