2016-04-28 9 views
1

マップにデータを追加する必要があります。私はこのようにそれを呼び出す必要があり複数の呼び出し機能

CSupermarket CSupermarket::Store(string name, CDate x, int count) { 

    pair <CDate, int> p; 
    p = make_pair (x, count); 
    vector<pair<CDate, int >>::iterator it; 
    vector<pair<CDate, int > > v; 
    if (items[name].size()) { 
    v = items[name]; 
    } 
    it = lower_bound (v.begin(), v.end(), p); 
    v.insert(it, p); 
    items[name] = v; 
    return * this; 
} 

:私はこの機能を作っ

CSupermarket s; 
s . Store ("bread", CDate (2016, 4, 30), 100) . 
     Store ("butter", CDate (2016, 5, 10), 10) . 
     Store ("beer", CDate (2016, 8, 10), 50) . 
     Store ("bread", CDate (2016, 4, 25), 100) . 
     Store ("okey", CDate (2016, 7, 18), 5); 
s . Store ("Coke", CDate (2016, 12, 31), 10); 

をしかし、私はこれを呼び出すときに、それが唯一の項目「パン」と「コーラ」を追加します。私はそれを修正する必要があります、それはすべての項目(パン、バター、ビール、オーカー、コーク)を追加してください、どうですか?

おかげ

+2

あなたはソート関数から参照することによりCSupermarketを返す必要があります。 – TheFooBarWay

答えて

5

は機能が*thisのコピーを返して、そしてすべてのチェーン呼び出しが新しいコピーを作成しています。
「パン」と「コークス」のみがsを変更しています。

あなたは*thisへの参照を返す必要があります。

CSupermarket & CSupermarket::Store(string name, CDate x, int count) 
      ^
      reference 
関連する問題