main.cpp中:
#include "Login.h"
int main () {
Login();
}
Login.h:
#ifndef LOGIN_H
#define LOGIN_H
#include <string>
#include <iostream>
using namespace std;
class Login
{
public:
Login ();
string getInput () {
return input;
}
void setInput (string x) {
x=input;
}
private:
string input;
};
#endif
Login.cpp:
#include "Login.h"
Login::Login ()
{
Login lo;
lo.setInput("hello");
cout << lo.getInput();
};
我正在学习编程,而我正在尝试创建一个简单的程序来显示输入,但是要使用类和对象来完成它,所以我可以学习如何并最终制作一个程序以登录开始(因此所有&#34;登录&#34;名称) 当我运行它时它只是崩溃,我不知道为什么,或者我如何在网上搜索解决方案,因为我甚至不知道问题是什么。
我的问题有两方面:
1.为什么这只是崩溃?
2.如何将lo.setInput中的参数设置为用户输入? (cin)
答案 0 :(得分:2)
1,
Login::Login()
{
Login lo; // here
你无限地递归调用Login构造函数。 Login lo
时,将调用构造函数Login::Login
。它创建了新的Login对象,并重复...
可能你想要这个:
Login::Login()
{
setInput("hello");
cout << getInput();
}
对于2,只需接收输入并与之通话。
string str;
getline(cin, str);
setInput(str);
此外,对于新手来说,C ++起初难以学习。我建议你从其他更简单的语言开始,比如C,python等。
答案 1 :(得分:0)
问题是你的构造函数在它的体内局部对象lo
Login::Login ()
{
Login lo;
lo.setInput("hello");
cout << lo.getInput();
};
按以下方式更改
Login::Login ()
{
setInput("hello");
cout << getInput();
};
虽然最好定义它(或允许编译器自己定义它)
Login::Login () {}
并在主要写
Login lo;
lo.setInput("hello");
cout << lo.getInput();
函数setInput也无效
void setInput (string x) {
x=input;
}
必须有
void setInput (string x) {
input = x;
}
该类可以定义为
class Login
{
public:
Login() = default;
Login( const std::string &s ) : input( s ) {}
std::string getInput () const { return input; }
void setInput( const std::string &s ) { input = s; }
private:
std::string input;
};
答案 2 :(得分:0)
您可能想要创建Login
类的实例并使用其方法:
int main(void)
{
Login my_login;
cout << my_login.getInput();
return 0;
}
另一种可能性是在static
类中创建Login
方法。这基本上就像将函数和变量分组到一个包中一样:
class Login
{
public:
static std::string getLoginText(void)
{
std::string text;
cout << "Enter login ID: ";
cin >> text;
return text;
}
};
int main(void)
{
std::string login_text;
login_text = Login::getLoginText();
cout << "Person " << login_text << " is logged in\n";
return 0;
}
您的原始main
程序是否要创建Login
类的临时实例或调用名为Login
的函数,这让您感到困惑。上述技术通过明确说明您的意图使您的代码更具可读性,而不是依赖于非传统技术。