2017-10-14 140 views
-1

我有以下代碼正在用於從矢量中找到最弱的目標,該矢量是一個包含指向所有活動單元的指針的向量。我正在嘗試創建一個遍歷每個單元並將其傳遞給另一個函數can_attack(單元& u,單元&v)的迭代器,它需要兩個單元並測量它們是否足夠接近彼此進行攻擊。將迭代器傳遞到函數

在編譯時,我收到以下錯誤「錯誤:引用類型'const Unit'無法綁定到類型爲'Unit * const'的左值」。我明白我正在傳遞錯誤類型的變量,但不確定如何將迭代器轉換爲常量單元。感謝您的任何幫助

void World::enemies_within_attack_range(const Unit &u, 
            vector<Unit*> &targets) const 
{ 
    targets.clear(); 
    vector<Unit*>::const_iterator it=units.begin(); 
    for(it;it!=units.end();it++){ 
    if((*it)->team != u.team){ 
     if(can_attack(u,(*it))){ 
      targets.push_back(*it); 
     } 
    } 
    } 

} 
+0

你可能想'can_attack(u,*(* it))'。 – songyuanyao

+0

這樣一個簡單的解決方案。謝謝。另一個快速問題..我for循環產生的表達式結果是未使用的錯誤..爲什麼會這樣?是否在for循環中使用表達式結果? – spaceinvaders101

+1

什麼是*表達結果*?你展示的代碼中有哪部分內容? – songyuanyao

回答

0

問題是在can_attack調用和參數常量單位& u。 由於songyuanyao提到:can_attack(u,*(* it)),這個調用必須糾正。 但這不是唯一的問題。 有三個選項:中

  1. ,而不是常量單位& U,聲明ü爲單位& U;
  2. 代替can_attack(單位& U,單位& v)中,將其聲明爲can_attack(常量單位& U,單位& V)如果可能的話; (這可能是最糟糕的選擇)使用調用can_attack(const_cast <單元&>(u),*(* it))。

選擇是你的。