2013-05-06 2 views
-1

Эй Я пытаюсь получить оружие из списка и использовать это конкретное оружие в своем классе. То, как я думаю, могу сделать это, поместив все оружие в список, а затем в любое время, когда я хочу использовать поиск оружия в списке и установить имя оружия в значение, возвращаемое поиском. Но я получаю ошибку времени выполнения, потому что я пытаюсь вернуть значение внутри списка вне цикла for. Может кто-нибудь дать мне решение этой проблемы ..., возвращающее значение вне цикла for

Вот мой код:

класс Оружие

DoublyLinkedList<Weapons> weaponsList; 
DoublyLinkedListIterator<Weapons> itr = weaponsList.getIterator(); 

    Weapons :: Weapons() 
    { 
     this->weaponID = 0; 
     this->weaponName = ""; 
     this->damage = 0; 
     this->weight = 0; 
    } 
    Weapons :: Weapons(int weaponID,string weaponName,int damage,int weight) 
    { 
     this->weaponID = weaponID; 
     this->weaponName = weaponName; 
     this->damage = damage; 
     this->weight = weight; 
    } 
    int Weapons :: getWeaponID() 
    { 
     return weaponID; 
    } 
    string Weapons :: getWeaponName() 
    { 
     return weaponName; 
    } 
    void Weapons::setWeaponName(string weaponName) 
    { 
     this->weaponName = weaponName; 
    } 
    int Weapons :: getDamage() 
    { 
     return damage; 
    } 
    int Weapons :: getWeight() 
    { 
     return weight; 
    } 
    void Weapons :: loadWeapons() 
    { 
     string fileName = "Weapons\\Weapons.txt"; 
     ifstream infile(fileName); 
     string garbage; 
     int loadWeaponID; 
     string loadWeaponName; 
     int loadDamage; 
     int loadWeight; 
     while(infile >> garbage >> loadWeaponID >> garbage >> garbage 
      >> garbage >> loadWeaponName >> garbage >> loadDamage >> garbage 
     >> garbage >> loadWeight >> garbage) 
     { 
      cout << "Weapon ID: \t\t"<< loadWeaponID<< "\n"; 
      cout << "Weapon Name: \t\t"<< loadWeaponName << "\n"; 
      cout << "Damage: \t\t" << loadDamage <<"\n"; 
      cout << "Weight: \t\t" << loadWeight << "\n"; 
      Weapons w1 (loadWeaponID,loadWeaponName,loadDamage,loadWeight); 
      weaponsList.Append(w1); 
     } 
    } 
    void Weapons :: printWeapons() 
    { 
     int index = 0; 
     //Loop through the iterator. 
     for(itr.Start();itr.Valid();itr.Forth()) 
     { 
      index++; 
      cout << "------------------Weapon------------------\n"; 
      cout << "--------------------------------\n"; 
      cout << "Position:\t\t" << index << "\n"; 
      cout << "--------------------------------\n"; 
      cout << "Weapon ID:\t\t" << itr.Item().getWeaponID() << "\n"; 
      cout << "Weapon Name:\t\t" << itr.Item().getWeaponName() << "\n"; 
      cout << "Damage:\t\t\t" << itr.Item().getDamage() << "\n"; 
      cout << "Weight:\t\t\t" << itr.Item().getWeight() << "\n"; 
      cout << "------------------------------------------\n"; 
     } 
     cout << "Weapons: \t\t" << weaponsList.getCount() << "\n"; 
    } 
    string Weapons :: searchByWeaponID(int searchByID) 
{ 
    //Loop through the Iterator. 
    for (itr.Start(); itr.Valid(); itr.Forth()) 
     { 
      //If the object entered has the same first name as the one in the loop. 
      if (itr.Item().getWeaponID() == searchByID) 
      { 
       //Print out the details from the list. 
       cout << "------------------------------------------\n"; 
       cout << "Experience:\t\t" << itr.Item().getWeaponID() << "\n"; 
       cout << "First Name:\t\t" << itr.Item().getWeaponName()<< "\n"; 
       cout << "Second Name:\t\t" << itr.Item().getDamage() << "\n"; 
       cout << "Level:\t\t\t" << itr.Item().getWeight() << "\n"; 
       cout << "------------------------------------------\n"; 

      } 
     } 
    setWeaponName(itr.Item().getWeaponName()); 
    cout << "Weapon NAme: " << getWeaponName(); 
    return getWeaponName(); 
} 

, а затем, когда я хочу использовать возвращаемое значение в классе игрока:

//------------------------------------------------------------------------------------------- 
// Name:   Default Constructor. 
//------------------------------------------------------------------------------------------- 
    Player :: Player() 
    { 
     this->firstName = ""; 
     this->secondName = ""; 
     this->level = 0; 
     this->experience = 0; 
     this->strength = 0; 
     string searchResult = weapons.searchByWeaponID(2); 
     this->weapons.setWeaponName(searchResult); 
    } 

ответ

1

Уточнено, что я тупо устанавливаю имя вне цикла.

string Weapons :: searchByWeaponID(int searchByID) 
{ 
    //Loop through the Iterator. 
    for (itr.Start(); itr.Valid(); itr.Forth()) 
     { 
      //If the object entered has the same first name as the one in the loop. 
      if (itr.Item().getWeaponID() == searchByID) 
      { 
       //Print out the details from the list. 
       cout << "------------------------------------------\n"; 
       cout << "Experience:\t\t" << itr.Item().getWeaponID() << "\n"; 
       cout << "First Name:\t\t" << itr.Item().getWeaponName()<< "\n"; 
       cout << "Second Name:\t\t" << itr.Item().getDamage() << "\n"; 
       cout << "Level:\t\t\t" << itr.Item().getWeight() << "\n"; 
       cout << "------------------------------------------\n"; 
       setWeaponName(itr.Item().getWeaponName()); 
      } 
     } 

    cout << "Weapon NAme: " << getWeaponName(); 
    return getWeaponName(); 
} 
Смежные вопросы