expected unqualified-id before '->' token

Greatljc 2019-05-08 12:56:18
最近在练习c++时,用c++的类来写一个双向循环链表,出现了以下错误,请问代码哪里错了
#ifndef L_I_N_K_P_S_N
#define L_I_N_K_P_S_N

#include <string>

template <typename datatype>
struct node {
node(): prev(nullptr), next(nullptr), value(-1) {};
node<datatype> *prev, *next;
datatype value;
};

//typedef node Node;

template <typename datatype>
class link {
public:
typedef unsigned size_type;
//link() = default;
// link(initializer_list<datatype> ls)
link() = default;

void insert(datatype t);
node<datatype>* search(datatype t);
std::string deletes(datatype t);
private:
node<datatype> nil;
typename node<datatype>::nil->prev = &nil, node<datatype>::nil->next = &nil; //编译出来是这行错了,请问为什么
};
错误信息如下[code=c]error: expected unqualified-id before '->' token
typename node<datatype>::nil->prev = &nil, node<datatype>::nil->next = &nil;

#endif[/code]
...全文
627 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Greatljc 2019-05-08
  • 打赏
  • 举报
回复
引用 8 楼 真相重于对错的回复:
[quote=引用 6 楼 jiht594 的回复:] [quote=引用 3 楼 Greatljc 的回复:] [quote=引用 2 楼 真相重于对错的回复:]typename 类似于typedef 是定义类型的 类似于 typename intvec = std::vector<int>; 你这个是想写赋值语句?还是要干嘛? 完全驴唇不不对马嘴?
不是,我原本想建立一个链表,然后那个nil就是哨兵,我想用构造函数来将nil.next指向nil它本身,nil.prev也指向nil它本身。后来报错 is not a name a type[/quote] 我这里构造函数里写就行啊 link() { nil->prev = &nil; nil->next = &nil;};[/quote] 在函数里面写赋值语句当然正确,你写在类声明里面肯定不对,而且你还用typename . 建议先把基本的语法弄清楚,而不是在这里瞎试。[/quote] 并且typename还是自己看到编译器的提示瞎加的
Greatljc 2019-05-08
  • 打赏
  • 举报
回复
引用 8 楼 真相重于对错的回复:
[quote=引用 6 楼 jiht594 的回复:] [quote=引用 3 楼 Greatljc 的回复:] [quote=引用 2 楼 真相重于对错的回复:]typename 类似于typedef 是定义类型的 类似于 typename intvec = std::vector<int>; 你这个是想写赋值语句?还是要干嘛? 完全驴唇不不对马嘴?
不是,我原本想建立一个链表,然后那个nil就是哨兵,我想用构造函数来将nil.next指向nil它本身,nil.prev也指向nil它本身。后来报错 is not a name a type[/quote] 我这里构造函数里写就行啊 link() { nil->prev = &nil; nil->next = &nil;};[/quote] 在函数里面写赋值语句当然正确,你写在类声明里面肯定不对,而且你还用typename . 建议先把基本的语法弄清楚,而不是在这里瞎试。[/quote] 我也觉得c++没学好,也只学完了c++primer 的容器。
Greatljc 2019-05-08
  • 打赏
  • 举报
回复
引用 7 楼 jiht594的回复:
[quote=引用 6 楼 jiht594 的回复:]
[quote=引用 3 楼 Greatljc 的回复:]
[quote=引用 2 楼 真相重于对错的回复:]typename 类似于typedef 是定义类型的
类似于
typename intvec = std::vector<int>;

你这个是想写赋值语句?还是要干嘛?
完全驴唇不不对马嘴?

不是,我原本想建立一个链表,然后那个nil就是哨兵,我想用构造函数来将nil.next指向nil它本身,nil.prev也指向nil它本身。后来报错 is not a name a type[/quote]

我这里构造函数里写就行啊
link() { nil->prev = &nil; nil->next = &nil;};[/quote]
nil.prev = &nil;
nil.next = &nil;[/quote] 那可能是我的c++学艺不精了。
真相重于对错 2019-05-08
  • 打赏
  • 举报
回复
引用 6 楼 jiht594 的回复:
[quote=引用 3 楼 Greatljc 的回复:] [quote=引用 2 楼 真相重于对错的回复:]typename 类似于typedef 是定义类型的 类似于 typename intvec = std::vector<int>; 你这个是想写赋值语句?还是要干嘛? 完全驴唇不不对马嘴?
不是,我原本想建立一个链表,然后那个nil就是哨兵,我想用构造函数来将nil.next指向nil它本身,nil.prev也指向nil它本身。后来报错 is not a name a type[/quote] 我这里构造函数里写就行啊 link() { nil->prev = &nil; nil->next = &nil;};[/quote] 在函数里面写赋值语句当然正确,你写在类声明里面肯定不对,而且你还用typename . 建议先把基本的语法弄清楚,而不是在这里瞎试。
jiht594 2019-05-08
  • 打赏
  • 举报
回复
引用 6 楼 jiht594 的回复:
[quote=引用 3 楼 Greatljc 的回复:]
[quote=引用 2 楼 真相重于对错的回复:]typename 类似于typedef 是定义类型的
类似于
typename intvec = std::vector<int>;

你这个是想写赋值语句?还是要干嘛?
完全驴唇不不对马嘴?

不是,我原本想建立一个链表,然后那个nil就是哨兵,我想用构造函数来将nil.next指向nil它本身,nil.prev也指向nil它本身。后来报错 is not a name a type[/quote]

我这里构造函数里写就行啊
link() { nil->prev = &nil; nil->next = &nil;};[/quote]
nil.prev = &nil;
nil.next = &nil;
jiht594 2019-05-08
  • 打赏
  • 举报
回复
引用 3 楼 Greatljc 的回复:
[quote=引用 2 楼 真相重于对错的回复:]typename 类似于typedef 是定义类型的
类似于
typename intvec = std::vector<int>;

你这个是想写赋值语句?还是要干嘛?
完全驴唇不不对马嘴?

不是,我原本想建立一个链表,然后那个nil就是哨兵,我想用构造函数来将nil.next指向nil它本身,nil.prev也指向nil它本身。后来报错 is not a name a type[/quote]

我这里构造函数里写就行啊
link() { nil->prev = &nil; nil->next = &nil;};
Greatljc 2019-05-08
  • 打赏
  • 举报
回复
引用 1 楼 jiht594的回复:
typename node<datatype>::nil->prev = &nil, node<datatype>::nil->next = &nil;

这是干什么的?typename 用的少。没见过。
可能是我的语法有错误
Greatljc 2019-05-08
  • 打赏
  • 举报
回复
引用 2 楼 真相重于对错的回复:
typename 类似于typedef 是定义类型的 类似于 typename intvec = std::vector<int>; 你这个是想写赋值语句?还是要干嘛? 完全驴唇不不对马嘴?
然后我就以为是某个名字空间的问题?就加了node::,发现就变成了上面那个错误了
Greatljc 2019-05-08
  • 打赏
  • 举报
回复
引用 2 楼 真相重于对错的回复:
typename 类似于typedef 是定义类型的 类似于 typename intvec = std::vector<int>; 你这个是想写赋值语句?还是要干嘛? 完全驴唇不不对马嘴?
不是,我原本想建立一个链表,然后那个nil就是哨兵,我想用构造函数来将nil.next指向nil它本身,nil.prev也指向nil它本身。后来报错 is not a name a type
真相重于对错 2019-05-08
  • 打赏
  • 举报
回复
typename 类似于typedef 是定义类型的 类似于 typename intvec = std::vector<int>; 你这个是想写赋值语句?还是要干嘛? 完全驴唇不不对马嘴?
jiht594 2019-05-08
  • 打赏
  • 举报
回复
typename node<datatype>::nil->prev = &nil, node<datatype>::nil->next = &nil;

这是干什么的?typename 用的少。没见过。

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧