简单的输入程序崩溃

时间:2014-09-12 22:45:34

标签: c++

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)

3 个答案:

答案 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的函数,这让您感到困惑。上述技术通过明确说明您的意图使您的代码更具可读性,而不是依赖于非传统技术。