C++ 类和访问

Posted

技术标签:

【中文标题】C++ 类和访问【英文标题】:C++ Classes and accessing 【发布时间】:2018-05-29 20:11:50 【问题描述】:

我收到一个错误,我是 C++ 新手,我完全不知道这意味着什么,而且我也知道你不应该以这种方式获取密码,但这是我能想到的唯一方法来测试自己更难的 C++ 领域,我刚开始,已经被这个难住了。

class user

private:
    int security;
    string password;
public:
    string username, email;
    int age;
    string signup()
    
        int num;
        cout << "Welcome new user!\nPlease enter your username:\n";
        cin >> username;
        cout << "What is your email?\n";
        cin >> email;
        cout << "What is your age?\n";
        cin >> age;
        cout << "Make a password:\n";
        cin >> password;
        cout << "Enter a number:\n";
        cin >> num;
        security = mnet::random(num);
        cout << "Your security code is " << security << endl;
        return username;


    
;
int main()

    string LorS;
    user cprofile;
    cout << "Welcome to MatrixNet! Login or Sign up?[L/S]\n";
    cin >> LorS;
    if(LorS == "S" || LorS == "s") 
        cprofile = cprofile.signup();
    



    return 0;

我得到的错误:

In function 'int main()':|
|55|error: no match for 'operator=' (operand types are 'user' and 'std::__cxx11::string aka std::__cxx11::basic_string<char>')

|20|note: candidate: user& user::operator=(const user&)

|20|note:   no known conversion for argument 1 from 'std::__cxx11::string aka std::__cxx11::basic_string<char>' to 'const user&'

|20|note: candidate: user& user::operator=(user&&)

|20|note:   no known conversion for argument 1 from 'std::__cxx11::string aka std::__cxx11::basic_string<char>' to 'user&&'|

Line 55:

    cprofile = cprofile.signup();

【问题讨论】:

cprofile.signup() 方法返回一个字符串。变量cprofile 不是字符串。您正在尝试将字符串分配给类(结构)。 cprofile = cprofile.signup(); 这毫无意义。阅读一本好的 C++ 书籍。 【参考方案1】:

您无法将字符串分配给类对象,正如您在编写此语句时所尝试的那样:

cprofile = cprofile.signup();

如果您只是想存储注册函数返回的字符串,那么只需声明一个新的字符串变量并使用它:

string LorS;
string userName;
user cprofile;
cout << "Welcome to MatrixNet! Login or Sign up?[L/S]\n";
cin >> LorS;
if(LorS == "S" || LorS == "s") 
    userName = cprofile.signup();

【讨论】:

【参考方案2】:

signup() 返回一个 std::string,但您试图将其分配给一个 user,正如编译器告诉您的那样(请注意,您不能这样做:

note: no known conversion for argument 1 from
      'std::__cxx11::string aka std::__cxx11::basic_string' to 'const user&'`

我建议放弃第 55 行的分配,直接调用cprofile.signup()。在面向对象编程中,对象是有状态的,这意味着它们包含状态,例如您的securitypassword 等。您的signup() 函数在它被调用的对象上设置此状态,因此只需说@987654330 @, cprofile 适当地修改自己。这也是class encapsulation的基础。

【讨论】:

【参考方案3】:

注册只是将用户名作为字符串返回,并设置您的帐户。因此,如果没有接收 std::string 的构造函数,试图将 cprofile 分配给 signup() 的返回值是没有意义的。看起来您想要注册的副作用而不是返回值,所以只需运行 cprofile.signup()。如果你不明白这一点,你可能需要了解更多。

【讨论】:

以上是关于C++ 类和访问的主要内容,如果未能解决你的问题,请参考以下文章

C++ 类 访问限制

C++类和对象

C++类和对象

C++类和对象

如何设计应从 C++ 和 C# 访问的组件

C++初阶---类和对象