lab.cpp:112:14: ошибка: нет участника с именем «дисплей» в » std::вектор»

#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…