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()
。在面向对象编程中,对象是有状态的,这意味着它们包含状态,例如您的security
、password
等。您的signup()
函数在它被调用的对象上设置此状态,因此只需说@987654330 @, cprofile
适当地修改自己。这也是class encapsulation的基础。
【讨论】:
【参考方案3】:注册只是将用户名作为字符串返回,并设置您的帐户。因此,如果没有接收 std::string 的构造函数,试图将 cprofile 分配给 signup() 的返回值是没有意义的。看起来您想要注册的副作用而不是返回值,所以只需运行 cprofile.signup()。如果你不明白这一点,你可能需要了解更多。
【讨论】:
以上是关于C++ 类和访问的主要内容,如果未能解决你的问题,请参考以下文章