繁体   English   中英

C ++在一个标头中声明多个类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM