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