Я пытаюсь определить два класса, один для пользователей и один для сообщений. Класс Message будет иметь атрибут UserID для идентификации того, кто разместил сообщение, что также является атрибутом класса User.
Я следовал учебному пособию, которое делало это для ресторана (с пользователями, продуктами питания и класс Orders, состоящий из атрибутов от Users and Foods), но все атрибуты были установлены на publi c, и мое задание попросило меня сделать это с закрытыми атрибутами с getter / setters. В конце у меня есть оператор cout, который печатает атрибуты из класса Message, но атрибут, который также является частью класса User, генерирует следующие ошибки:
Ошибка C2679 двоичная '<<': не найден оператор, который принимает правый операнд типа «Пользователь» (или нет допустимого преобразования) </p>
Ошибка (активна) E0349 нет оператора «<<», совпадающего с этими операндами </p>
Если я удаляю часть msg.getUserID оператора Cout, код выполняется нормально.
Другие найденные мной вопросы касались атрибутов publi c или использовали ключевое слово Friend , Есть ли другой способ сделать это? Я попытался переместить атрибут в publi c в классе User (хотя я не могу сделать это для моего назначения), но все равно получаю те же ошибки. Я предполагаю, что это потому, что я объявил getUserID в классе Message как тип User, но я не могу найти другой способ сделать это. Я очень плохо знаком с C ++, поэтому извиняюсь, если какой-то код не самый эффективный способ сделать что-то (это обязательный модуль в моем курсе аналитики, я использовал только Python до этого момента). Любая помощь могла бы быть полезна. Спасибо!
#include <iostream>
#include <string>
using namespace std;
class User {
private:
int userID;
string firstName;
string lastName;
string email;
public:
void setUser(int userID, string firstName, string lastName, string email) {
this->userID = userID;
this->firstName = firstName;
this->lastName = lastName;
this->email = email;
}
int getUserID() {
return userID;
}
string getFirstName() {
return firstName;
}
string getLastName() {
return lastName;
}
string getEmail() {
return email;
}
};
class Message {
private:
int msgID;
User userID;
string message;
public:
void setMessage(string message, User userID) {
static int msgID = 0;
msgID++;
this->message = message;
this->msgID = msgID;
this->userID = userID;
}
string getMessage() {
return message;
}
User getUserID() {
return userID;
}
int getMsgID() {
return msgID;
}
};
int main()
{
User user1;
User user2;
user1.setUser(5, "Alice", "Smith", "alice.smith@test.com");
user2.setUser(8, "Bob", "Jones", "bob.jones@test.com");
Message msg1;
Message msg2;
msg1.setMessage("Hello this is a message", user1);
msg2.setMessage("this is a second message", user2);
cout << "message ID: " << msg1.getMsgID() << ", user ID: " << msg1.getUserID() << ", message: " << msg1.getMessage() << endl;
cout << "message ID: " << msg2.getMsgID() << ", user ID: " << msg2.getUserID() << ", message: " << msg2.getMessage() << endl;
}