出于我的面向应用对象课程的教学目的,要求我们开发一个功能齐全的C ++应用程序,而不使用STL或cstring中的任何字符串操作功能(稍后将涉及GUI的SDL)。
在重新开发简单的String和list容器层次结构类时,我遇到了循环依赖问题。以前,我使用前向声明解决了此类问题。但是,这次情况没有按预期进行,这个问题使我现在忙了几个晚上。
这是我遇到的问题的简单UML图。
每个类都有自己的.cpp
和.hpp
文件,除了BaseListItemNotFoundException
我在using
类声明的上方使用BaseList
语句声明。
class BaseListItemNotFoundException: BaseException {
using BaseException::BaseException;
};
即使这不会添加任何添加的信息(IMHO),也请让我精确说明BaseList
和HeplList
类实际上是使用.ipp
和{{1}定义的模板类}。
我省略了一些涉及将环境限制为最小工作示例的其他类(迭代器和Cell通用类层次结构用作列表的有效负载)。为了清楚起见,已删除了使用.hpp
和define
条件的标题保护。
以下是文件的摘要:
ifndef
:
BaseList.hpp
#include <cstddef>
#include <iostream>
#include "Cell.hpp"
class HeplString; // Forward declaration
#include "BaseException.hpp"
class BaseListItemNotFoundException: BaseException {
using BaseException::BaseException;
};
template<class T>
class BaseList {
// code
};
:
HeplList.hpp
#include <cstddef>
#include "BaseList.hpp"
#include "Cell.hpp"
template<class T>
class HeplList : public BaseList<T> {
// code
};
#include "HeplList.ipp"
:
HeplString.hpp
#include <cstddef>
#include <iostream>
#include <ostream>
#include <fstream>
#include "HeplList.hpp"
class HeplString {
// code
};
:
BaseException.hpp
此示例的主要问题是这样的错误:
#include "HeplString.hpp"
#include "BaseList.hpp"
class BaseException {
// code
};
我不明白我在做什么错。阅读其他类似问题无济于事。
如果需要,我的git存储库及其完整代码可在此处使用:https://github.com/wget/hepl-2-cpp
答案 0 :(得分:0)
#include "BaseException.hpp"
添加到BaseList.hpp
#include "HeplList.hpp"
添加到HeplString.cpp
template<class T> class HeplList;
添加到HeplString.hpp
BaseList.hpp
标头的其他一些类,因为它们依赖标头HeplString.hpp
来做到这一点。