2010-09-03 87 views
1

對不起,但這真是令我困惑,我知道答案是盯着我的臉,我無法弄清楚。有人可以看看嗎?它的航空預訂系統學校項目。C++從類的向量的指針訪問類的成員

此功能包含航班號,容量, 航班數的計數以及包含所有航班的航班作爲參數。 它將檢查以確保航班不存在,如果它存在錯誤 消息將被顯示,如果不是將創建航班。 航班數量的計數也會增加。

void newFlight(string f, string s, int* n, vector<Flight> *v) 
{ 

    Flight temp; 

    //Check to see if flight number exists 
    bool alreadyExist = false; 
    for (int i=0; i < v->size(); i++) 
    { 
     if (f.compare((v[i].getNumber()) == 0)) 
     alreadyExist = true; 
    } 

    //If it doesn't exist, create it 
    if (!alreadyExist) 
    {  
     v->push_back (temp); //Add the new Flight object to the 
              //vector of flights 
     *n++;   //Increase count 
    } 

    else 
    { 
     cout << "A flight numbered " << f << " already exists"; 
     cout << ". Flight not created.\n"; 
    } 

}; 

我的問題是,當我試圖比較航班號,已經在載體中的航班與我想要添加的航班。在第7行我不斷收到此消息:

error: ‘class std::vector<Flight, std::allocator<Flight> >’ has no member named ‘getNumber’

在考慮中的載體是與具有名爲getNumber()成員Flight類的載體。我通過引用將向量傳遞給函數。所以v是一個指針,但我認爲[]會照顧到這一點。我也嘗試使用 - >運算符而不是點運算符,但它沒有幫助。我在虧本,任何幫助,將不勝感激。我相對生疏,夏天剛剛完成:D我也希望這是格式正確。

回答

5

參數v作爲向量的指針傳遞給您的函數。如果你使用[]運算符,它就像在C中一樣認爲v是一個指向矢量數組的指針,所以v [i]實際上仍然是一個向量。

你應該做的是這樣的:

(*v)[i].getNumber(); 
+0

非常感謝!我很欣賞所有的快速答案。還有一件事,當我用這種方式內聯比較函數時,編譯器給了我這個錯誤: 錯誤:在'Flight :: getNumber()()== 0'中沒有匹配'operator ==' 因此,無論如何要寫入所有內聯而不會重載==運算符?這只是出於好奇,我只是最終將代碼的輸出保存到臨時字符串變量,然後在比較函數中使用它。再次感謝! – Ben 2010-09-03 18:59:31

+0

getNumber返回的類型是什麼?如果這不是本地類型(如int),則必須定義運算符==來告訴編譯器如何比較兩個非本機類型。如果你在頭文件中實現了operator ==,編譯器可能會爲你內聯(如果operator ==的實現不是太大)。 – Patrick 2010-09-03 22:12:24

3

如果v是指向矢量的指針,則表達式v[n]意味着矢量陣列中的第n個矢量v。您要的是(*v)[n]

2

My problem is that when I try to compare the flight number the flights already in the vector with the one I am trying to add. On line 7 I keep getting this message:

你或許應該切換到一個排序容器像setmap。這是自動處理的。

0

看起來像一個小括號問題。

嘗試改變這一點:

if (f.compare((v[i].getNumber()) == 0)) 

if (f.compare((v[i].getNumber())) == 0) 
0

一些其他的答案已經釘問題:v是一個指針,所以你必須使用稍有不同的語法得到你想要的。我會建議,如果這樣一個向量必須總是傳遞給這個函數(在其他世界,你永遠不會傳遞NULL),那麼你應該通過引用而不是通過指針傳遞。在這種情況下,你的函數將花費vector<Flight> &v,這將允許你使用矢量而不用額外的指針語法麻煩。 v[i].getNumber()實際上會工作。

相關問題