大家好,每个人都试图将使用结构数组的旧C程序翻译成使用链表的C ++程序。我是一个完整的C ++ newb,我对在C ++中设置链表的语法有点困惑....这是我的代码:
#include <iostream>
#include <stdlib.h>
#include <string>
#include <ctype.h>
#include <fstream>
using namespace std;
struct Video {
char video_name[1024];
int ranking; // Number of viewer hits
char url[1024]; // Video URL
struct Video *next; // pointer to Video structure
}
struct Video* Collection = new struct Video;
Collection *head = NULL; // EMPTY linked list
在我的旧程序Collection
中有一个Video
数组。如何使Collection
成为Video
个节点的链接列表?我目前收到的错误是在最后两行代码中说:expected initializer before 'Collection'
和expected constructor, destructor or type conversion before '*' conversion
。我知道我的语法肯定是错误的,但我想我不明白如何在Collection中创建视频的链接列表......
答案 0 :(得分:2)
c ++答案是:
struct Video {
std::string video_name;
int ranking; // Number of viewer hits
std::string url; // Video URL
}
std::list<Video> list_of_videos
答案 1 :(得分:0)
您已将Collection
定义为指向视频的类型变量。在下一行,你将它视为一种类型,这是没有意义的。所有你需要的是:
Video *head = NULL;
head
代表链接列表。你不需要另一个变量。
OTOH,如果你真的想要正确使用C ++,我建议坚持使用数组解决方案,除非你的使用模式以某种方式保证了链表的语义。如果它是已知大小的数组,您有两种选择:
Video videos[N];
std::array<Video, N> videos; // Preferred in C++11
否则,请使用std::vector<T>
:
std::vector<Video> videos;
如果确实必须是链接列表,请考虑使用std::list<T>
:
std::list<Video> videos;
在所有这些情况下,您应该忽略struct Video *next;
。