0

大家好,大家好,试图将使用结构数组的旧 C 程序翻译成使用链表的 C++ 程序。我是一个完全的 C++ 新手,我对在 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 中创建视频链接列表......

4

2 回答 2

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
于 2012-10-07T00:12:38.810 回答
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;.

于 2012-10-07T00:11:44.690 回答