2014-03-02 48 views
0

我很久沒碰過C++,並且在遇到這個問題時試圖製作紅黑樹模板。我想添加一個元素,只是關閉的事情。但是當我切換功能時,Im不能有相同的RBT變量。它變成了一個全新的變量。爲什麼這不工作C++無法連接兩個對象

#include <iostream> 
#include <string> 
#include "redblacktree.h" 

using namespace std; 

int menu(); 
void addElement(RedBlackTree<int> RBT); 
void peak(RedBlackTree<int> RBT); 

int main() 
{ 
    int option=-1; 

    RedBlackTree<int> RBT; 

    while(option != 99) 
    { 
     option=menu(); 

     switch(option) 
     { 
     case 1: 
      addElement(RBT); 
      break; 
     case 3: 
      peak(RBT); 
      break; 

     } 
    } 

    return 0; 
} 

int menu() 
{ 
    int option; 

    cout<<"1. Add element"<<endl; 
    cout<<"3. Peek"<<endl; 

    cin>>option; 
    cin.ignore(); 
    return option; 
} 

void addElement(RedBlackTree<int> RBT) 
{ 
    int value; 
    cout<<"Enter element: "<<endl; 
    cin>>value; 
    cin.ignore(); 

    RBT.insert(value); 
    //cout<<RBT.printRoot()<<endl; //works 
} 

void peak(RedBlackTree<int> RBT) 
{ 
    cout<<RBT.printRoot()<<endl; //does not work 
} 

回答

1

你想通過引用傳遞:

void addElement(RedBlackTree<int> &RBT); 
void peak(RedBlackTree<int> &RBT); 

這不創建對象的副本。

1

目前傳遞RedBlackTree<int> RBTaddElement()peak()香港專業教育學院不知道。通過C++的傳值性質,實例在傳遞給函數之前被複制。因此,這些功能在臨時副本上工作。

爲了使函數對傳入的實例起作用,應該通過引用傳遞參數。在這種情況下,請將RedBlackTree<int>&轉換爲addElement()peak()

另外,既然你說你的peak()沒有工作,你應該檢查你的拷貝構造函數是否正確。

0

您必須通過引用傳遞,因爲您通過添加新元素來修改對象。

在你的解決方案中,在addElement的末尾,RBT被簡單地銷燬,因爲它像一個局部變量,並且超出了範圍。