ปัญหาไม่ใช่ว่าคุณไม่สามารถประกาศคลาสแม่แบบส่งต่อได้ ใช่คุณจำเป็นต้องทราบพารามิเตอร์เทมเพลตทั้งหมดและค่าเริ่มต้นเพื่อให้สามารถประกาศไปข้างหน้าได้อย่างถูกต้อง:
namespace std {
template<class T, class Allocator = std::allocator<T>>
class list;
}
แต่การที่จะทำให้การประกาศไปข้างหน้าnamespace std
นั้นถูกห้ามอย่างชัดเจนโดยมาตรฐาน: สิ่งเดียวที่คุณอนุญาตให้ใส่ได้std
คือความเชี่ยวชาญพิเศษของเทมเพลตโดยทั่วไปจะstd::less
อยู่ในประเภทที่ผู้ใช้กำหนดเอง บุคคลอื่นสามารถอ้างถึงข้อความที่เกี่ยวข้องได้หากจำเป็น
เพียง#include <list>
และไม่ต้องกังวลกับมัน
โอ้บังเอิญชื่อใด ๆ ที่มีขีดสองครั้งที่สงวนไว้สำหรับการใช้งานโดยการดำเนินการดังนั้นคุณควรใช้สิ่งที่ต้องการแทนTEST_H
__TEST__
มันไม่ได้เป็นไปเพื่อสร้างคำเตือนหรือข้อผิดพลาด แต่ถ้าโปรแกรมของคุณมีการปะทะกันกับตัวระบุการดำเนินงานที่กำหนดไว้แล้วก็ไม่รับประกันว่าจะรวบรวมหรือทำงานอย่างถูกต้อง: มันไม่ดีเกิดขึ้น นอกจากนี้ยังห้ามชื่อที่ขึ้นต้นด้วยขีดล่างตามด้วยอักษรตัวใหญ่และอื่น ๆ โดยทั่วไปอย่าเริ่มต้นด้วยเครื่องหมายขีดล่างเว้นแต่คุณจะรู้ว่าคุณกำลังใช้เวทมนตร์อะไรอยู่
std::allocator<T>