我不是使用模板的专家,但是我不确定为什么要error: 'SLinked_List' is not a class template: friend class SLinked_List<T>;使用class的定义SNode。这段代码有什么问题?
谢谢你,普拉纳夫
#include <iostream>
#include <string>
template <typename T>
class SNode{
friend class SLinked_List<T>;
private:
T data;
SNode<T>* next;
};
template <typename T>
class SLinked_List{
private:
SNode<T>* head;
public:
SLinked_List(){
head = nullptr;
}
bool empty() const { return head == nullptr; }
void insert_first (const T&);
};
template <typename T>
void SLinked_List<T> :: insert_first (const T& t){
SNode<T>* node = new SNode<T>;
node->data = t;
node->next = head;
head = node;
}
int main(){
SLinked_List<std::string> ls;
ls.insert_first("Hello");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当您使用模板参数来引用名称时,您是在说此类型已经作为模板存在,我想引用该模板的特定专业化名称。里面SNode,SLinked_List还没有宣布呢,所以这不能被允许的,因为编译器甚至不知道这是否是一个模板呢。
很显然,您想和接受专业知识T,所以需要在声明SLinked_List之前SNode:
template <typename T>
class SLinked_List;
template <typename T>
class SNode{
friend class SLinked_List<T>;
private:
T data;
SNode<T>* next;
};
Run Code Online (Sandbox Code Playgroud)
现在,编译器知道这SLinked_List是一个模板,可以这样引用。
| 归档时间: |
|
| 查看次数: |
4867 次 |
| 最近记录: |