c++11 - 重载 << 运算符的问题
问题描述
我目前正在尝试使用运算符重载并构建以下代码
//圆.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
对此有任何解决方法吗?
解决方案
您在文件之间具有循环依赖关系:Circle.cpp
包含IOD.cpp
,反之亦然。
为了使其正常工作,您应该将文件拆分为仅cpp
包含API 定义的位置。cpp
.h
.h
您应该将其#include
视为“复制粘贴”。
推荐阅读
- git - Git 显示我添加了另一个人的更改
- sql - 使用 JOB_TITLE 和 EVENT_DATE 查找上次换工作的日期
- c - C中的每个指针都应该分配在堆上吗?
- c - 如何使用 llvm-c API 使用内联汇编
- flutter - 如何用另一个 GestureDetector 包装 GestureDetector 并在任何地方获取事件
- laravel - laravel 雄辩的嵌套关系计数
- node.js - typescript 在 checkAuth 中间件之后更改请求的类型
- javascript - 我在 HTML 中制作的可播放结构很平淡,通用属性没有帮助
- azure - 如何将“存储 Blob 数据读取器”角色分配给 azure 中的用户/组?
- bash - 如果第一行匹配表达式,则删除行,但接下来的 2 行不匹配不同的表达式