C++类对象赋值错误求助:无法将string赋值给user类对象
解决你的C++用户注册类编译错误
嘿,我来帮你搞定这个编译错误!咱们先拆解一下问题根源:
错误原因分析
你写的signup()函数返回的是string类型的用户名,但在main()里,你却试图把这个字符串赋值给user类型的对象cprofile:
cprofile = cprofile.signup();
C++里默认的user类赋值运算符(operator=)只能接受同类型的user对象作为右侧值,它完全不知道怎么把一个string转换成user对象,所以编译器才抛出了这个“no match for 'operator='”的错误。
而且你其实根本不需要这个赋值操作——signup()函数已经在直接修改cprofile对象的成员变量(比如username、email这些)了,返回的用户名只是额外输出,没必要再把它赋值回对象本身。
两种解决方案
方案1:把signup()改成无返回值(更贴合逻辑)
既然signup()的核心作用是初始化user对象的成员,不需要返回值的话,直接把返回类型改成void就行:
#include <iostream> #include <string> // 记得添加mnet库对应的头文件,比如#include "mnet.h" using namespace std; // 新手阶段可以先加这个,简化代码书写 class user { private: int security; string password; public: string username, email; int age; // 修改返回类型为void void 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语句 } }; 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.signup(); } return 0; }
方案2:保留返回值,但不赋值给对象
如果你确实想让signup()返回用户名,那只需要调用函数即可,不用把返回值赋值给cprofile:
if(LorS == "S" || LorS == "s") { // 可选:把返回的用户名存到单独的字符串变量里 string new_username = cprofile.signup(); // 或者直接忽略返回值:cprofile.signup(); }
额外小提醒
你的代码里用到了cout、cin和string,一定要在开头加上#include <iostream>和#include <string>;另外mnet::random这个函数,要确保你已经包含了对应的库头文件哦!
内容的提问来源于stack exchange,提问作者InsaneMatrix
相关产品推荐
相关产品推荐

