C ++使用吸气剂从另一个类访问一个类的私有成员

问题描述 投票:0回答:1

我正在尝试定义两个类,一个用于用户,一个用于消息。 Message类将具有属性UserID来标识谁发布了消息,这也是User类的属性。]

我遵循了为餐厅(具有Users,Foods和Orders类,由Users和Foods的属性组成的类)执行此操作的教程,但是这些属性均设置为public,我的任务要求我这样做具有带有getters / setters的私有属性。最后,我有一个cout语句,该语句打印出Message类的属性,但是该属性也是User类的一部分,它会产生以下错误:

错误C2679二进制'<

错误(活动)E0349没有运算符“ <

如果我删除Cout语句的msg.getUserID部分,代码将运行正常。

我发现的这个问题的其他实例与公共属性有关,或者使用了Friend关键字。还有其他方法吗?我尝试将属性在User类中移至public(尽管我无法为自己的任务执行此操作),但仍然遇到相同的错误。我想是因为我已经在Message类中将getUserID声明为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", "[email protected]");
    user2.setUser(8, "Bob", "Jones", "[email protected]");

    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;

}

我正在尝试定义两个类,一个用于用户,一个用于消息。 Message类将具有UserID属性,以标识谁发布了消息,这也是User类的属性。 ...

c++ class private
1个回答
0
投票

消息仅知道名为UseruserID(不好意思,因为它是一个整体User,而不仅仅是ID)。它需要向User询问User的ID,因此请更改


0
投票

如果只想打印userID,则不能将整个对象传递给cout,因为它不知道如何打印,只能传递对象userID的userID。>

 cout << "message ID: " << msg1.getMsgID() << ", user ID: " <<                                    msg1.getUserID().getUserID() << ", message: " << msg1.getMessage() << endl;
            ^^^^^^^^^^^^
© www.soinside.com 2019 - 2024. All rights reserved.