LATIF Ι.Κ Ответов: 2

Как я могу проверить, принадлежит ли объект игрока определенной стороне


Specify a void type function named part_of_party (). This function is a friend function in the Party class. It accepts a Party type and a Player type. The purpose of this function is to check if a Player object belongs to a particular Party. The control will only be performed for the player's variable name. If the player is already in the group then the function: 'nameAlreadypartoftheParty' will be printed. If it does not then it will display: 'nameAddedaspartoftheParty: party_name'
Where name is the name of the player (variable name) and party_name the name of the Party (variable party_name) into which the player is entered. Along with the name of the player must be entered his level (variable level)


но это ничего не показывает после комплайла :/

Что я уже пробовал:

void part_of_party(Party &party1, Player &player){

    bool found = false;

    for(int i=0; (found == false && i< player.getName().size()); ++i){
        if((party1.players[i]).compare(player.getName())==0){
            found = true;
        };

    }
    if (found == true){
        cout << player.getName() <<" Already part of the Party";
    }
    else{
        cout << player.getName() << " Added as part of the Party " << party1.party_name;
    }

};

2 Ответов

Рейтинг:
1

Stefan_Lang

if(Player.getName() == Party.getNames())

Рассмотрим, что выражает это условие:
1. вы извлекаете имена из вашей партии
2. результатом является набор имен, то есть некоторый контейнер, который может содержать 0, 1 или >1 имен
3. затем вы пытаетесь сравнить одно имя с этим набором имен, используя ==. К чему должно привести это сравнение? Это не имеет большого смысла.

Вместо этого вам нужно выполнить итерацию по набору имен и сравнить каждое имя набора в отдельности. Что-то вроде этого может сработать:
автоматический имена = партия.метод getnames();
bool found_name = false;
for (auto name = names.begin(); !found && name != names.end; ++name)
   found = (Player.getName() == name);
if (found)
...


Рейтинг:
0

OriginalGriff

Вам нужно просмотреть список имен в партии и проверить их все по одному.
Если вы нашли совпадение, игрок находится в партии.
Если вы этого не сделаете, то после того, как цикл закончится, игрок не будет в партии.

Это все равно, что взять наугад дюжину карт из перетасованной колоды: если вы хотите знать, есть ли среди них четверка треф, вы смотрите на каждую по очереди. Если это четверка и это клуб, то вы нашли то, что хотели. Если это не так, вы отбрасываете его и смотрите на следующий.

Попробуйте подумать о ситуациях "реального мира", когда вы получаете такую проблему: они часто дают вам представление о том, что вам нужно сделать в коде.