Как мне объявить функцию друга для класса? - PullRequest
0 голосов
/ 17 ноября 2018

Вне темы: я хочу спросить, это правильное место, чтобы задать такой вопрос?

Что было бы более подходящим местом для такого рода вопросов?из "наивных" вопросов?Я хотел бы веб-сайт или что-то.Спасибо.Теперь моя проблема:

У меня есть задача написать функцию check_name ( this проблема).

Я получаю ошибку: 'first_name' не было объявлено в этой области решено

РЕДАКТИРОВАТЬ: я только что понял, что этого недостаточно, и я должен удалить все символы после того, как я найду один встрока ...

Вот код.Спасибо.

#include <iostream>
#include <string>

using namespace std;

class student
{
private:
    string first_name;
    string last_name;

public:
    void set_name(string f, string l)
    {
        first_name = f;
        last_name = l;
    }

    friend void check_name(student k);
};

bool isInside(const string &str, char c)
{
    return str.find(c) != string::npos;
}

void check_name(student k)
{
    bool ok = true;
    for(int i = 0; i < first_name.size(); i++)
    {
        if(!isInside(last_name, first_name[i])) 
        {
            ok = false;
            break;
        }
    }
    if (ok) cout << "ANAGRAM" << endl;
    else cout << "NOT ANAGRAM" << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        string f, l;
        cin >> f >> l;
        student s;
        s.set_name(f, l);
        check_name(s);
    }
}

1 Ответ

0 голосов
/ 17 ноября 2018

Вы хотите использовать

void check_name(student k)
{
    bool ok = true;
    for (int i = 0; i < k.first_name.size(); i++)
//                      ^^
    {
        if (!isInside(k.last_name, k.first_name[i]))
//                    ^^           ^^
        {
            ok = false;
            break;
        }
    }
    if (ok) cout << "ANAGRAM" << endl;
    else cout << "NOT ANAGRAM" << endl;
}

Поскольку ваш check_name() читает только k, вы можете передать его как student const&.

...