클래스에서 기본 생성자를 전달합니까?

user4049003
 void MovieTree::addMovieNode(int ranking, std::string title, int releaseYear, int quantity)
    {

        std::cout<<"Adding root"<<std::endl;
        if(root == NULL)
        {
            std::cout<<"enter root"<<std::endl;
            MovieNode* root = new MovieNode;    
            root->ranking = ranking;
            root->title = title;
            root->year = releaseYear;
            root->quantity = quantity;
            root->leftChild = root->rightChild = NULL;
            std::cout<<"Item added"<<std::endl;
            std::cout<<title<<std::endl;

        }   

        else if(root)
        {
            std::cout<<"skipped root"<<std::endl;
            MovieNode* newNode = new MovieNode;
            newNode->ranking = ranking;
            newNode->title = title;
            newNode->year = releaseYear;
            newNode->quantity = quantity;


            MovieNode* currentNode = root;
            MovieNode* previousNode = currentNode;

            while(currentNode)
            {
                previousNode = currentNode;

                if(currentNode->title.compare(title) > 0)
                {
                    currentNode = currentNode->rightChild;
                }
                else if(currentNode->title.compare(title) < 0)
                {
                    currentNode = currentNode->leftChild;
                }

            }

            if(previousNode->title.compare(title) > 0)
            {
                previousNode->rightChild = newNode;
            }
            else if(previousNode->title.compare(title) <0)
            {
                previousNode->leftChild = newNode;
            }
        }

    }

이진 검색 트리의 코드입니다. 내 "addMovieNode"기능에 문제가 있습니다. BST의 첫 번째 노드를 초기화하는 초기 사례에 들어 가지 않습니다. 내 'main.cpp'드라이버에서 첫 번째 생성자를 전달하는 방법에 대한 오해 때문이라고 생각합니다.

#include "MovieTree.hpp"
#include <iostream>

MovieTree::MovieTree()
{
    MovieNode* root = NULL;

}

void MovieTree::printMovieInventory()
{
    printMovieInventory(root);
}
void MovieTree::printMovieInventory(MovieNode* node)
{
    if(node)
    {
        while(node->rightChild && node->leftChild)
        {
            std::cout<<"Movie:"<<node->title<<" "<<node->quantity<<std::endl;
            if(node->rightChild)
            {
                printMovieInventory(node->rightChild);
            }
            if(node->leftChild)
            {
                printMovieInventory(node->leftChild);
            }
        }
    }
    else
    {
        std::cout<<"No movies in list!"<<std::endl;
    }
}

void MovieTree::addMovieNode(int ranking, std::string title, int releaseYear, int quantity)
{

    std::cout<<"Adding root"<<std::endl;
    if(root == NULL)
    {
        std::cout<<"enter root"<<std::endl;
        MovieNode* root = new MovieNode;    
        root->ranking = ranking;
        root->title = title;
        root->year = releaseYear;
        root->quantity = quantity;
        root->leftChild = root->rightChild = NULL;
        std::cout<<"Item added"<<std::endl;
        std::cout<<title<<std::endl;

    }   

    else if(root)
    {
        std::cout<<"skipped root"<<std::endl;
        MovieNode* newNode = new MovieNode;
        newNode->ranking = ranking;
        newNode->title = title;
        newNode->year = releaseYear;
        newNode->quantity = quantity;


        MovieNode* currentNode = root;
        MovieNode* previousNode = currentNode;

        while(currentNode)
        {
            previousNode = currentNode;

            if(currentNode->title.compare(title) > 0)
            {
                currentNode = currentNode->rightChild;
            }
            else if(currentNode->title.compare(title) < 0)
            {
                currentNode = currentNode->leftChild;
            }

        }

        if(previousNode->title.compare(title) > 0)
        {
            previousNode->rightChild = newNode;
        }
        else if(previousNode->title.compare(title) <0)
        {
            previousNode->leftChild = newNode;
        }
    }

}


void MovieTree::findMovie(std::string title)
{
    if(search(title))
    {
        MovieNode* foundMovie = search(title); 
        std::cout<< "Movie Info:"<<std::endl;
        std::cout<< "==========="<<std::endl;
        std::cout<< "Ranking:"  <<foundMovie->ranking<<std::endl;
        std::cout<< "Title:"        <<foundMovie->title<<std::endl;
        std::cout<< "Year:"     <<foundMovie->year<<std::endl;
        std::cout<< "Quantity:" <<foundMovie->quantity<<std::endl;
    }
    else
    {std::cout<<"Movie not found."<<std::endl;}
}

MovieNode* MovieTree::search(std::string title)
{
    if(root)
    {
        MovieNode* temp = root;
        while(temp && temp->rightChild && temp->leftChild)
        {
            if(!temp)
            {
                if(temp->title == title)
                {
                    return temp;
                }
                else if(temp->title.compare(title) > 0)
                {
                    temp = temp->rightChild;
                }
                else if(temp->title.compare(title) < 0)
                {
                    temp = temp->leftChild;
                }
            }

        }
    }
    else
    {
        std::cout<<"Root does not exist! Movie not found!\n";
    }
}

void MovieTree::rentMovie(std::string title)
{
    if(search(title))
    {
        MovieNode* foundMovie = search(title);

        if(foundMovie->quantity > 0)
        {
            foundMovie->quantity--;
            std::cout<<"Movie has been rented."<<std::endl;
            std::cout<<"Movie Info:"<<std::endl;
            std::cout<<"==========="<<std::endl;
            std::cout<<"Ranking:"<<foundMovie->ranking<<std::endl;
            std::cout<<"Title:"<<foundMovie->title<<std::endl;
            std::cout<<"Year:"<<foundMovie->year<<std::endl;
            std::cout<<"Quantity:"<<foundMovie->quantity<<std::endl;
        }
        else if(foundMovie->quantity == 0)
        {
            std::cout<<"Movie out of stock"<<std::endl;
        }
    }
    else if(!search(title))
    {
        std::cout<<"Movie not found."<<std::endl;
    }
}

main.cpp의 참조는 다음과 같습니다.

 MovieTree movieTree;

 MovieTree();


 movieTree.addMovieNode(12, "The good and bad", 1870, 12);
 cout<<"Added"<<endl;

값이 함수를 통해 전달 된 후 분할 오류가 발생하고 초기 if (root) 문을 입력하지 않습니다.

조나단 포터

에서 addMovieNode기능을 로컬 변수를 선언하고 있습니다 root:

MovieNode* root = new MovieNode;

이것은 클래스의 멤버 인 변수 숨기는root입니다.

수정 사항은 선언을 제거하여 클래스 멤버가 대신 수정되도록하는 것입니다.

root = new MovieNode;

생성자에서도 똑같은 일이 발생합니다.

MovieTree::MovieTree()
{
    MovieNode* root = NULL;
}

그것도 간단하게 변경해야합니다 root = NULL;.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

CRTP를 사용하여 기본 클래스의 자식 클래스를 생성자에 전달합니까?

분류에서Dev

파생 클래스의 기본 생성자에서 기본 생성자로 인수를 전달할 수 있습니까?

분류에서Dev

Javascript에서 "클래스"생성자 인수로 전달되는 변수를 초기화해야합니까?

분류에서Dev

전달 생성자는 기본 클래스의 복사 생성자를 2 번 호출합니다.

분류에서Dev

상속 된 인수를 기본 클래스 생성자에 전달한 다음 파생 클래스 생성자에서 작업 수행

분류에서Dev

부모 클래스에 C ++의 기본 생성자가없는 경우 상속 된 클래스에서 생성자를 어떻게 사용합니까?

분류에서Dev

Forth에서 기본 클래스와 해당 클래스의 인스턴스를 어떻게 생성합니까?

분류에서Dev

C ++에서 기본 및 파생 클래스에 대한 '가상'생성자를 선언 하시겠습니까?

분류에서Dev

비 생성자 매개 변수 변수를 파생 클래스에서 기본 클래스 생성자로 전달하면 이상한 동작이 발생합니다.

분류에서Dev

비 생성자 매개 변수 변수를 파생 클래스에서 기본 클래스 생성자로 전달하면 이상한 동작이 발생합니다.

분류에서Dev

std :: throw_with_nested는 Exception의 가상 기본 클래스에 대한 기본 생성자를 예상합니까?

분류에서Dev

C ++ 파생 클래스는 초기화 전에 기본 클래스에서 메서드를 호출합니다.

분류에서Dev

Android의 Kotlin에서 활동 클래스에 대한 기본 생성자를 작성할 수 없습니다.

분류에서Dev

기본 클래스 만 알고있는 경우 파생 클래스를 어떻게 전달합니까?

분류에서Dev

파생 클래스 속성을 Angular의 기본 클래스 생성자에 전달할 때 오류 발생

분류에서Dev

왜 기본 클래스 생성자를 호출해야합니까?

분류에서Dev

기본 클래스에서 생성 된 클래스에 @property를 만드는 방법은 무엇입니까?

분류에서Dev

기본 클래스에서 "super ()"를 사용해야합니까?

분류에서Dev

C ++는 순수 가상 클래스에 대해 기본 "생성자 / 소멸자 / 복사 생성자 / 복사 할당 연산자"를 생성합니까?

분류에서Dev

파생 클래스에서 기본 클래스 생성자의 특수화를 구현하는 다른 방법은 무엇입니까?

분류에서Dev

기본 클래스 intializer에서 기본 생성자를 호출하지 않으려면 어떻게해야합니까?

분류에서Dev

기본 클래스 생성자에 매개 변수를 전달할 때 멤버 초기화

분류에서Dev

기본 클래스에서 파생 된 클래스의 인스턴스를 함수로 전달

분류에서Dev

클래스에 대한 기본 생성자가 없습니다.

분류에서Dev

상속 된 클래스 생성자 인수를 기본 생성자 인수로 전달

분류에서Dev

오버로드 된 메서드에 매개 변수로 전달할 때 기본 클래스와 파생 클래스를 구분합니다.

분류에서Dev

이동 시맨틱이있는 RAII 클래스에서 기본 생성자는 무엇을해야합니까?

분류에서Dev

이동 시맨틱이있는 RAII 클래스에서 기본 생성자는 무엇을해야합니까?

분류에서Dev

이동 시맨틱이있는 RAII 클래스에서 기본 생성자는 무엇을해야합니까?

Related 관련 기사

  1. 1

    CRTP를 사용하여 기본 클래스의 자식 클래스를 생성자에 전달합니까?

  2. 2

    파생 클래스의 기본 생성자에서 기본 생성자로 인수를 전달할 수 있습니까?

  3. 3

    Javascript에서 "클래스"생성자 인수로 전달되는 변수를 초기화해야합니까?

  4. 4

    전달 생성자는 기본 클래스의 복사 생성자를 2 번 호출합니다.

  5. 5

    상속 된 인수를 기본 클래스 생성자에 전달한 다음 파생 클래스 생성자에서 작업 수행

  6. 6

    부모 클래스에 C ++의 기본 생성자가없는 경우 상속 된 클래스에서 생성자를 어떻게 사용합니까?

  7. 7

    Forth에서 기본 클래스와 해당 클래스의 인스턴스를 어떻게 생성합니까?

  8. 8

    C ++에서 기본 및 파생 클래스에 대한 '가상'생성자를 선언 하시겠습니까?

  9. 9

    비 생성자 매개 변수 변수를 파생 클래스에서 기본 클래스 생성자로 전달하면 이상한 동작이 발생합니다.

  10. 10

    비 생성자 매개 변수 변수를 파생 클래스에서 기본 클래스 생성자로 전달하면 이상한 동작이 발생합니다.

  11. 11

    std :: throw_with_nested는 Exception의 가상 기본 클래스에 대한 기본 생성자를 예상합니까?

  12. 12

    C ++ 파생 클래스는 초기화 전에 기본 클래스에서 메서드를 호출합니다.

  13. 13

    Android의 Kotlin에서 활동 클래스에 대한 기본 생성자를 작성할 수 없습니다.

  14. 14

    기본 클래스 만 알고있는 경우 파생 클래스를 어떻게 전달합니까?

  15. 15

    파생 클래스 속성을 Angular의 기본 클래스 생성자에 전달할 때 오류 발생

  16. 16

    왜 기본 클래스 생성자를 호출해야합니까?

  17. 17

    기본 클래스에서 생성 된 클래스에 @property를 만드는 방법은 무엇입니까?

  18. 18

    기본 클래스에서 "super ()"를 사용해야합니까?

  19. 19

    C ++는 순수 가상 클래스에 대해 기본 "생성자 / 소멸자 / 복사 생성자 / 복사 할당 연산자"를 생성합니까?

  20. 20

    파생 클래스에서 기본 클래스 생성자의 특수화를 구현하는 다른 방법은 무엇입니까?

  21. 21

    기본 클래스 intializer에서 기본 생성자를 호출하지 않으려면 어떻게해야합니까?

  22. 22

    기본 클래스 생성자에 매개 변수를 전달할 때 멤버 초기화

  23. 23

    기본 클래스에서 파생 된 클래스의 인스턴스를 함수로 전달

  24. 24

    클래스에 대한 기본 생성자가 없습니다.

  25. 25

    상속 된 클래스 생성자 인수를 기본 생성자 인수로 전달

  26. 26

    오버로드 된 메서드에 매개 변수로 전달할 때 기본 클래스와 파생 클래스를 구분합니다.

  27. 27

    이동 시맨틱이있는 RAII 클래스에서 기본 생성자는 무엇을해야합니까?

  28. 28

    이동 시맨틱이있는 RAII 클래스에서 기본 생성자는 무엇을해야합니까?

  29. 29

    이동 시맨틱이있는 RAII 클래스에서 기본 생성자는 무엇을해야합니까?

뜨겁다태그

보관