簡體   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