Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2021, 15:26   #1
Daria16
 
Регистрация: 08.10.2021
Сообщений: 5
Злость Классы C++

C++. Есть код: выводит список людей (фамилия возраст и т.д), из них же нужно выбрать избирателей по заданной фамилии (вводит пользователь). То есть из списка выбрать одновременно тех, кому 18 и больше и чтоб фамилия человека совпадала с той, какую я ввела. Сначала сделала так, что выводился список избирателей, потом задавала фамилию для поиска, и уже из избирателей он находил нужную фамилию. Теперь надо сделать одновременно, попытка есть, но выдает ошибку в последнем действии, где if, не определяет Man в условии (выделила красным). Как исправить?

#include <iostream>
#include <string>
#include <Windows.h>

using namespace std;

class TMan
{
private:
string family;
string name;
string otchestvo;
int age;
string address;
public:
TMan()
{

family = "";
name = "";
otchestvo = "";
age = 0;
address = "";
};
TMan(string Family, string Name, string Otchestvo, int Age, string Address)
{
family = Family;
name = Name;
otchestvo = Otchestvo;
age = Age;
address = Address;
};
TMan(TMan& Man)
{
family = Man.family;
name = Man.name;
otchestvo = Man.otchestvo;
age = Man.age;
address = Man.address;
};
void SetMan(TMan& Man)
{
cout << "Введите имя: ";
cin >> Man.name;
cout << "Введите Фамилию человека: ";
cin >> Man.family;
cout << "Введите отчество: ";
cin >> Man.otchestvo;
cout << "Введите возвраст: ";
cin >> Man.age;
cout << "Введите адрес: ";
cin.ignore();
getline(cin, Man.address);
cout << "\n";
}
void GetMan(const TMan& Man)
{
cout << "Фамилия: " << Man.family;
cout << "\nИмя: " << Man.name;
cout << "\nОтчество: " << Man.otchestvo;
cout << "\nВозраст: " << Man.age;
cout << "\nАдрес: " << Man.address << endl << endl;
}

void sravnFamily(const TMan& Man, string Family)
{
if ((Man.family == Family));
GetMan(Man);

}
void copy(TMan& Man1, TMan& Man2);
};

int main()
{
setlocale(LC_ALL, "ru");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int N = 0;
string Family;
cout << "Введите количество человек: ";
cin >> N;
TMan* obj = new TMan[N];
cout << "\n________________________________ ____\n";
TMan objTMan;
for (int i = 0; i < N; i++) {
objTMan.SetMan(obj[i]);
}
cout << "\n________________________________ ____\n";
cout << "Объект созданный конструктором с параметрами:\n";
TMan Man1("Иванов", "Иван", "Иванович", 33, "г. Москва, ул Мира, д 375, кв 5");
objTMan.GetMan(Man1);
cout << "\n";
cout << "Объект созданный конструктором копирования (скопирован первый объект):\n";
TMan obj1(obj[0]);
objTMan.GetMan(obj1);
cout << "\n________________________________ ____\n";
cout << "Список людей:\n\n";
for (int i = 0; i < N; i++)
{
objTMan.GetMan(obj[i]);
}
cout << "\n________________________________ ____\n";
cout << "Введите фамилию для сравнения: ";
cin >> Family;
cout << "\n________________________________ ____\n";

cout << "Избиратели: \n\n";
for (int i = 0; i < N; i++)
{
if ((Man.age >= 18));

objTMan.sravnFamily(obj[i], Family);

}

system("Pause");
return 0;
}
Daria16 вне форума Ответить с цитированием
Старый 09.12.2021, 15:39   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

1. Для ифа одних скобок хватает.
2. Если вы сразу ставите после ифа ;, то при условии ничего не выполняет, ибо тело пусто, а операторы ниже выполняются всегда.
3. SetMan и GetMan внутри TMan выглядит странновато.
4. Для конструкторов используйте список инициализации.
5. В вашем коде
Код:
int main()
{
setlocale(LC_ALL, "ru");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int N = 0;
string Family;
cout << "Введите количество человек: ";
cin >> N;
TMan* obj = new TMan[N];
cout << "\n________________________________ ____\n";
TMan objTMan;
for (int i = 0; i < N; i++) {
objTMan.SetMan(obj[i]);
}
cout << "\n________________________________ ____\n";
cout << "Объект созданный конструктором с параметрами:\n";
TMan Man1("Иванов", "Иван", "Иванович", 33, "г. Москва, ул Мира, д 375, кв 5");
objTMan.GetMan(Man1);
cout << "\n";
cout << "Объект созданный конструктором копирования (скопирован первый объект):\n";
TMan obj1(obj[0]);
objTMan.GetMan(obj1);
cout << "\n________________________________ ____\n";
cout << "Список людей:\n\n";
for (int i = 0; i < N; i++)
{
objTMan.GetMan(obj[i]);
}
cout << "\n________________________________ ____\n";
cout << "Введите фамилию для сравнения: ";
cin >> Family;
cout << "\n________________________________ ____\n";

cout << "Избиратели: \n\n";
for (int i = 0; i < N; i++)
{
if ((Man.age >= 18));

objTMan.sravnFamily(obj[i], Family);

}

system("Pause");
return 0;
}
упоминание Man только одно и оно в вашем условии.
ForenLi вне форума Ответить с цитированием
Старый 09.12.2021, 16:36   #3
Daria16
 
Регистрация: 08.10.2021
Сообщений: 5
По умолчанию

Я поменяла одну из функций, одну убрала, и в конце получилось по-другому, то что поменяла желтое, но все равно выдает ошибку (строки выделила красным):
TMan::sravnAge: функция не принимает 1 аргументов
слишком мало аргументов в вызове функции

#include <iostream>
#include <string>
#include <Windows.h>

using namespace std;

class TMan
{
private:
string family;
string name;
string otchestvo;
int age;
string address;
public:
TMan()
{

family = "";
name = "";
otchestvo = "";
age = 0;
address = "";
};
TMan(string Family, string Name, string Otchestvo, int Age, string Address)
{
family = Family;
name = Name;
otchestvo = Otchestvo;
age = Age;
address = Address;
};
TMan(TMan& Man)
{
family = Man.family;
name = Man.name;
otchestvo = Man.otchestvo;
age = Man.age;
address = Man.address;
};
void SetMan(TMan& Man)
{
cout << "Введите имя: ";
cin >> Man.name;
cout << "Введите Фамилию человека: ";
cin >> Man.family;
cout << "Введите отчество: ";
cin >> Man.otchestvo;
cout << "Введите возвраст: ";
cin >> Man.age;
cout << "Введите адрес: ";
cin.ignore();
getline(cin, Man.address);
cout << "\n";
}
void GetMan(const TMan& Man)
{
cout << "Фамилия: " << Man.family;
cout << "\nИмя: " << Man.name;
cout << "\nОтчество: " << Man.otchestvo;
cout << "\nВозраст: " << Man.age;
cout << "\nАдрес: " << Man.address << endl << endl;
}
void sravnAge(const TMan& Man, string Family, string Age)
{
if ((Man.age >= 18)&&(Man.family == Family))
GetMan(Man);
}

void copy(TMan& Man1, TMan& Man2);
};

int main()
{
setlocale(LC_ALL, "ru");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int N = 0;
string Family;
cout << "Введите количество человек: ";
cin >> N;
TMan* obj = new TMan[N];
cout << "\n________________________________ ____\n";
TMan objTMan;
for (int i = 0; i < N; i++) {
objTMan.SetMan(obj[i]);
}
cout << "\n________________________________ ____\n";
cout << "Объект созданный конструктором с параметрами:\n";
TMan Man1("Иванов", "Иван", "Иванович", 33, "г. Москва, ул Мира, д 375, кв 5");
objTMan.GetMan(Man1);
cout << "\n";
cout << "Объект созданный конструктором копирования (скопирован первый объект):\n";
TMan obj1(obj[0]);
objTMan.GetMan(obj1);
cout << "\n________________________________ ____\n";
cout << "Список людей:\n\n";
for (int i = 0; i < N; i++)
{
objTMan.GetMan(obj[i]);
}
cout << "\n________________________________ ____\n";
cout << "Введите фамилию для сравнения: ";
cin >> Family;
cout << "\n________________________________ ____\n";

cout << "Избиратели: \n\n";
for (int i = 0; i < N; i++)
{
objTMan.sravnAge(obj[i]);

}

system("Pause");
return 0;
}
Daria16 вне форума Ответить с цитированием
Старый 09.12.2021, 16:41   #4
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Вы вызываете:
Код:
objTMan.sravnAge(obj[i]);
смотрим определение функции:
Код:
void sravnAge(const TMan& Man, string Family, string Age)
давайте вместе посчитаем сколько параметров у функции... 1, 2, 3...
ForenLi вне форума Ответить с цитированием
Старый 09.12.2021, 18:01   #5
Daria16
 
Регистрация: 08.10.2021
Сообщений: 5
По умолчанию

Да, точно, простите. Спасибо)
Daria16 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы в С++ Lily-R Помощь студентам 1 25.09.2010 22:59
C++ и классы xnise Помощь студентам 0 13.06.2010 18:31
классы в с++ whim Общие вопросы C/C++ 2 09.06.2010 22:34
[C++] Классы AquaticSoul Общие вопросы C/C++ 10 09.06.2010 17:57