#c
Вопрос:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Date {
public:
Date() {
day = 12;
month = 31;
year = 2021;
}
Date(int x, int y, int z) {
day = x;
month = y;
year = z;
}
void GetDate() {
cout << "Date: " << day << "/" << month << "/" << year << endl;
}
private:
int day;
int month;
int year;
};
class Time {
public:
Time() {
hour = 12;
minute = 30;
}
Time(int x, int y) {
hour = x;
minute = y;
}
void GetTime() { cout << "Time: " << hour << ":" << minute << "n"; }
private:
int hour;
int minute;
};
class Invitee {
string email;
public:
Invitee() { email = "jake_alvarado@csufresno.edu"; }
Invitee(string id) {
if (checkId(id) == true) {
email = id;
}
}
bool checkId(string amp;id) {
if (id.length() - 14 < 3) {
cout << "Invalid Email. Please Input New Email: n";
cin >> id;
checkId(id);
}
if (isdigit(id.at(0))) {
cout << "Invalid Email. Please Input New Email: n";
cin >> id;
checkId(id);
};
return true;
}
void display() { cout << "Email: " << email << endl; }
};
class Event {
string title;
string location;
Date *date;
Time *time;
vector<Invitee> list;
public:
Event(string t, string l, int day, int month, int year, int h, int m,
string e) {
title = t;
location = l;
date = new Date(day, month, year);
time = new Time(h, m);
list.push_back(e);
}
void display() {
cout << "Title: " << title << endl;
cout << "Location: " << location << endl;
date->GetDate();
time->GetTime();
list.display(); ///////////////////// This Line is Issue
}
};
int main() {
Event e1("Lunch", "Park", 9, 24, 2021, 12, 30, "jake_alvarado@csufresno.edu");
e1.display();
return 0;
}
Я понимаю, что компилятор путается между доступом к std и векторной библиотеке и доступом к моему приглашенному классу. Но я точно не знаю, как исправить эту проблему. Кто-нибудь может мне помочь с этим?
Проблема возникает в классе «Событие», я думаю, и в классе «Приглашенный»под функцией «Отображение». Я также почти уверен, что моя функция отображения неверна.
Что я хочу, чтобы он отображал строковое электронное письмо, которое помещено внутри vector<invitee> list
.
Ответ №1:
list
является a vector<Invitee>
и имеет только функции-члены, определенные шаблоном std::vector
класса, поэтому вы не можете этого сделать list.display()
. Этой функции-члена не существует.
Однако вы можете выполнить цикл над Invitee
s, хранящимися в list
, и вызвать display()
функцию-член для каждого элемента:
for(Inviteeamp; inv : list) inv.display();
Несвязанное предложение: создайте все функции-члены, которые не изменяют объект const
:
void display() const { // <- there
cout << "Email: " << email << endl;
}
Это позволяет вызывать функцию-член в const
контекстах.
Комментарии:
1. Спасибо, мужчина, я действительно ценю это!
2. @JakeAlvarado Добро пожаловать!
Ответ №2:
Компилятор жалуется , потому что вы вызываете vector.display()
, чего не существует.
Вместо этого вы хотели бы повторить операции в векторе и вызвать их безрезультатно
for (autoamp; member: list) {
member.display();
}
Комментарии:
1. Спасибо, чувак, я пойду дальше и попробую это!
2. Делай. или не делай. Yodda yodda yodda…