[英]C++ declaring multiple classes in one header
我有一个作业,应该使用CRTP创建一个链接列表。 关于如何在各自的头文件中定义类,我得到了一些起始代码/建议。 我在下面省略了一些代码:
链接
#include <iosfwd>
template<class T>
class List;
template<class T>
class Link {
Link* next;
friend class List<T>;
public:
Link();
virtual ~Link() = default;
//etc...
清单.h
#include "Link.h"
template<class T>
class List : public Link<T> {
public:
List();
T* First();
T* Last();
//Etc...
此代码编译无任何错误。 现在我的问题是关于Link.h中的前两行, template<class T> class List;
。 我做了一些实验,意识到如果没有类定义,Link.h就不会被编译,这是因为friend class List<T>
语句的缘故。 但是,为什么我不能只编写#include "List.h"
并删除List.h内部的继承并从一开始就使用该定义呢? 我当然尝试过这个并得到错误
"error: 'List' is not a class template
friend class List<T>;"
它看起来像这样:
链接
#include <iosfwd>
#include "List.h"
template<class T>
class Link {
Link* next;
friend class List<T>;
public:
Link();
virtual ~Link() = default;
清单.h
#include "Link.h"
template<class T>
class List {
public:
List();
T* First();
尝试仅在一个文件中或在顺序建立的文件中使用唯一模板,而不是同等地使用。 就您而言,您可能应该将所有文件都移到一个。 您的.h文件似乎相互镜像,因此您的编译器本可以在引用之间来回移动,但它们是按顺序进行的。 选择优先顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.