Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对象的第二个实例无法正常工作_C++_Instance - Fatal编程技术网

C++ 对象的第二个实例无法正常工作

C++ 对象的第二个实例无法正常工作,c++,instance,C++,Instance,因此,我正在从我的课堂教材开始编写一个例子:早期对象,我遇到了一个问题。我被指示创建一个程序,读入一些数据并在最后打印出来,总共2个实例。当第二个实例(md2)运行时,它不允许我在第一个字段中输入任何内容。这真的让我烦透了,我想不出来。提前谢谢 #include <iostream> using namespace std; class MovieData { private: string movieTitle; string movieDirector;

因此,我正在从我的课堂教材开始编写一个例子:早期对象,我遇到了一个问题。我被指示创建一个程序,读入一些数据并在最后打印出来,总共2个实例。当第二个实例(md2)运行时,它不允许我在第一个字段中输入任何内容。这真的让我烦透了,我想不出来。提前谢谢

#include <iostream>

using namespace std;

class MovieData
{
private:
    string movieTitle;
    string movieDirector;
    int movieYear;
    int movieRunTime;
public:
    MovieData()
    {
        GetTitle();
        GetDirector();
        GetYear();
        GetRunTime();
    }

    void GetTitle()
    {
        cout << "Specify A Title\n";
        getline(cin, movieTitle);
        cout << endl;
    }
    void GetDirector()
    {
        cout << "Specify A Director" << endl;
        getline(cin, movieDirector);
        cout << endl;
    }
    void GetYear()
    {
        cout << "Specify A Year" << endl;
        cin >> movieYear;
        cout << endl;
    }
    void GetRunTime()
    {
        cout << "Specify A Duration In Minutes" << endl;
        cin >> movieRunTime;
        cout << endl;
    }

    void SetTitle()
    {
        cout << "R" << movieTitle << endl;
    }
    void SetDirector()
    {
        cout << "R" << movieDirector << endl;
    }
    void SetYear()
    {
        cout << "R" << movieYear << endl;
    }
    void SetRunTime()
    {
        cout << "R" << movieRunTime << endl;
    }


};

void PrintData(MovieData md);

int main() {
    MovieData md1;
    PrintData(md1);
    MovieData md2;
    PrintData(md2);
}


void PrintData(MovieData md)
{
    md.SetTitle();
    md.SetDirector();
    md.SetYear();
    md.SetRunTime();
    cout << endl;
}
#包括
使用名称空间std;
类电影资料
{
私人:
弦乐电影;
弦乐电影导演;
国际电影年;
国际电影时间;
公众:
电影资料()
{
GetTitle();
GetDirector();
GetYear();
GetRunTime();
}
void GetTitle()
{

CUT< P>之所以发生这种情况,是因为在编写<代码> Md1时,从最终用户读取的最后一项是“代码> int 。最终用户键入整数,然后按Enter。C++将整数读入MovirunTime//C>中,但留下字符代码用于下一次读的缓冲。

下一次,输入字符的代码将返回到
GetTitle
,这意味着标题将变成一个空字符串。这就是您正在观察的行为

要解决此问题,请添加对构造函数的调用:

MovieData()
{
    GetTitle();
    GetDirector();
    GetYear();
    GetRunTime();
    std::cin.ignore(256, '\n');
}

旁注:您不需要实例化对象吗?@BlackFrog在Java或C#中,每个对象都是指针,因此您需要使用
new
命令初始化
MovieData
。(即
MovieData md1=new MovieData()这个例子是C++。在C++中,简单地声明类的实例将调用构造函数。是的,我想这就是你的意思。我记得从那些语言中,但我想知道你为什么提到它LOL.KARITE36。我认为学习正在发生的事情是你任务的一大部分。缓冲的效果将出现在输入和输出都有多个位置,因此了解这里发生的事情非常有用。没有注意到复选标记。它起作用了。我们从未涉及缓冲,问题所在的章节也没有涉及缓冲。看看学校每学期使用单独的书籍时会发生什么?不一致。