c++ - 类方法返回指向具有模板的类成员的指针
问题描述
我正在尝试为具有自己的类“Node”的类“LinkedList”编写一个函数。“LinkedList”类是一个模板类。我正在尝试编写一个函数“Foo_do_something”,它返回一个指向“节点”的指针。以下是代码:
template <typename T>
class LinkedList{
public:
class Node {
public:
T data;
Node *next;
Node *prev;
Node(): next(nullptr), prev(nullptr) {}
Node(const T & data): data(data), next(nullptr), prev(nullptr) {}
};
public:
Node* Foo_do_something();
};
template <typename T>
Node* LinkedList<T>::Foo_do_something(){
std::cout<<"Hello";
Node *ptr = new Node(100);
return ptr;
}
使用此代码,我得到错误:
error: ‘Node’ does not name a type
我知道这是因为“节点”属于“LinkedList”类范围。所以我需要以某种方式添加这些信息。我尝试了以下代码,但这也会引发错误。
LinkedList<T>::Node* LinkedList<T>::Foo_do_something(){
我可以理解,如果我在类中定义函数,那么问题就可以解决。但我试图将函数的实现分开。有没有办法做到这一点?
解决方案
如评论中所述,正确的形式是:
typename LinkedList<T>::Node* LinkedList<T>::Foo_do_something() {
最近的编译器还会告诉您,typename
如果您尝试在没有它的情况下编译它,您需要它。
原因LinkedList<T>::
是必要的,因为在编译器到达之前解析返回类型LinkedList<T>::Foo_do_something
并知道您正在为哪个类定义成员函数,从而知道在哪里寻找Node
.
为什么typename
有必要在这个问题中解释。基本上,它在模板被实例化之前告诉编译器这LinkedList<T>::Node
是一个类型而不是别的东西。编译器需要知道这一点才能正确解析定义,但在它真正知道是什么之前T
,它无法确定是::Node
指类型还是变量或函数等。
或者,您可以使用尾随返回类型语法,其中查找已经使用类上下文:
auto LinkedList<T>::Foo_do_something() -> Node* {
推荐阅读
- unit-testing - 如何模拟 JoinRow 进行单元测试
- ios - 了解 Jetsam 日志“proc-thrashing”
- c++ - 如何在 macos 上的 C++ 项目中使用 DCMTK
- python - 如何动态更改 selenium webdriver 的代理 IP?
- primefaces - 如何为 primefaces 扩展计时器设置起始值
- python - 在 Python 中使用 GLM 测量约束回归的拟合优度
- java - Eclipse 显示端口在使用 tomcat v9 运行 Web 应用程序时正在使用,即使我更改了它
- angular - Electron + Angular (7) OAuth 2.0 重定向
- c++ - GCC 不会禁用基于 SFINAE 规则的功能
- javascript - 如何使用纯 javascript 检测全屏 api 支持?