0

vlist.h

 class Vlist
    {
    public:
        Vlist();
        ~Vlist();
        void insert(string title, string URL, string comment, float length, int rating);
        bool remove();

    private:
        class Node
        {
        public:
            Node(class Video *Video, Node *next)
            {m_video = Video; m_next = next;}
            Video *m_video;
            Node *m_next;
        };
        Node* m_head;
    };

main.cpp

 int main()
    {
    ....blah blah.... (cin the values)

            Array[i] = new Video(title, URL, comment, length, rating);
            Vlist objVlist;
            objVlist.insert(title, URL, comment, length, rating);
    }

vlist.cpp

ここからエラーが発生します

(m_head = new Node(Video, NULL); 

... この関数の仕事は、オブジェクトへのポインタをクラス video からリストに挿入することです。

 void Vlist::insert(string title, string URL, string comment, float length, int rating)
    {
        Node *ptr = m_head;
        //list is empty
        if(m_head == NULL)
            m_head = new Node(Video, NULL);
        else
        {
            ptr = ptr->m_next;
            ptr = new Node(Video, NULL);
        }
        //sort the list every time this executes

    }

video.h

これは、リンクされたリストを使用してポイントしようとしているクラスです。

class Video
{
public:
    Video(string title, string URL, string comment, float length, int rating);
    ~Video();
    void print();
    bool longer(Video *Other);
    bool higher(Video *Other);
    bool alphabet(Video *Other);
private:
    string m_title;
    string m_url;
    string m_comment;
    float m_length;
    int m_rating;
};

初めてスタック オーバーフローを使用するので、何が起こるかわかりません。

4

2 に答える 2

2

変更してみてください

m_head = new Node(Video, NULL);

m_head = new Node(new Video(title, URL, comment, length, rating), NULL);

この:

else
{
    ptr = ptr->m_next;
    ptr = new Node(Video, NULL);
}

Nodeリストの先頭に新しいものを追加するのは実際には正しい方法ではありません。次のようなものが必要です:

ptr = new Node(new Video(title, URL, comment, length, rating), NULL);
ptr->m_next = m_head;
m_head = ptr;
于 2013-03-12T10:32:57.170 に答える
1

「ビデオ」はクラスの名前です。インスタンス
を作成する必要があります。Video

void Vlist::insert(string title, string URL, string comment, float length, int rating)
{
    Video* v = new Video(title, URL, comment, length, rating);
    Node *ptr = m_head;
    if(m_head == NULL)
        m_head = new Node(v, NULL);
    else
    {
        ptr = ptr->m_next;
        ptr = new Node(v, NULL);
    }
    // ...
 }
于 2013-03-12T10:34:48.807 に答える