2016-10-11 5 views
0

でC++を使用してオブジェクトファイルの機能を使用する:私はバイナリ検索ツリーを作っていると私は、.cppファイルに次の機能を持っているBST

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; 
    } 

私はどのように私がすべきに、わずかわかりませんよ私のmain.cppファイルまたは "ドライバファイル"でこの関数を参照している可能性があります。私はこれを使用して、メインでそれに言及:

  case 3: //message is read in from file 
       { 
       MovieTree::printMovieInventory(node); 
       } 

       break; 

しかし、これを参照する時には、それだけでエラーがスローされます。

Driver.cpp:37:40: error: cannot call member function 'void MovieTree::printMovieInventory(MovieNode*) without object 
MovieTree::printMovieInventory(node); 

ないこれが何を意味するのか確認を。

ここでの主なフル

int main(int argc, char **argv) 
{ 
    bool quit = false; 
    string s_input; 
    int input; 

    // loop until the user quits 
    while (!quit) 
    { 
     MovieNode* node = new MovieNode; 
     printOptions(); 

     // read in input, assuming a number comes in 
     getline(cin, s_input); 
     input = stoi(s_input); 

     switch (input) 
     { 
      // print all nodes 
      case 1:  //rebuild network 

       break; 


       break; 

      case 3: //message is read in from file 
       { 
       MovieTree::printMovieInventory(node); 
       } 
       break; 

      case 4:  // quit 
       quit = true; 
       cout << "Goodbye!"<< endl; 
       break; 

      default: // invalid input 
       cout << "Invalid Input" << endl; 
       break; 
     } 
    } 

} 
+0

実際にはどうなりますか? –

+0

'MovieTree'のインスタンスが必要で、そのインスタンスで関数を呼び出します。それがオブジェクト指向プログラミングと呼ばれる理由です。 – NathanOliver

+0

@πάντα_ῥεMovie MovieTreeのインスタンスを参照しようとすると、エラーが発生します – Whatamia

答えて

0

あなたはMovieTreeのインスタンスを必要としています。 Somehwereコード内とswitch文の上に、あなたが追加する必要があります

MovieTree movieTree; 

をして、あなたのswitch文は次のようになります。また

case 3: //message is read in from file 
       movieTree.printMovieInventory(node); 
       break; 

、MovieTreeは何の状態(無フィールドを持っていない場合。またはそれが依存する他の機能)上記のコードの代わりにprintMoviewTreestaticとマークすることができます。

+0

staticとマークするのは何ですか? – Whatamia

+0

静的にマークすると、コンパイラに、インスタンスを呼び出す必要はありません。したがって、もともと 'MovieTree :: printMovieInventory(node)'を試みたように呼び出すことができます。欠点は、静的関数は、呼び出しに結びついたインスタンスがないので、クラスの状態(インスタンス化されたクラスの状態はとにかく)にアクセスできないということです。ただし、フィールドやインスタンスメソッドを追加しない場合は、オプションです。 –

関連する問題