不能在类中第二次设置字符串类型

时间:2018-06-08 11:01:52

标签: c++ string class

我有课

class Item
{
    private:
        string name;

    public:
        void set_data()
        {
            getline(cin, name);
        }
}

从主要功能我设置名称的值一次,但是当我想给它另一个值时,我不能。我的意思是第二次从同一个对象调用函数时,它什么也没做。

1 个答案:

答案 0 :(得分:-3)

首先,在C ++中,您的实现应该与声明分开,除非您使用的模板不是。这不是Java。

其次,您的示例代码缺少右括号。我已经提交了一个编辑来添加它并改进您的代码格式。

除此之外,以下实施对我有用:

Item.h

class Item
{
private:
    std::string name;

public:    
    void set_data();
    void printName();
};

Item.cpp

void Item::set_data()
{
    std::cout << "Type name and hit return: " << std::endl;
    getline(std::cin, name);
}

void Item::printName()
{
    std::cout << "Name is : " << name << std::endl;
}

的main.cpp

// Entry point
int main(int argc, char** argv)
{
    // Yes I thought I would mix things up and use new instead of Item i; So shoot me.
    Item * i = new Item();

    i->set_data();
    i->printName();

    i->set_data();
    i->printName();

    delete i;

    return 0;
}

应用程序将等待两次调用set_data(),以便我输入内容并点击返回。然后它继续正常。我添加了一个文本提示,因此在控制台中看到它不那么令人困惑。我明白了:

enter image description here

这会以某种方式回答您的问题吗?如果你在main()中做了其他事情,那么尝试将其剥离回到这个简单的操作,然后重新添加其他内容,直到找到引入问题的位。

<强>更新 根据下面的评论提示,如果您在std::cin >>的另一次调用之前放置getline(),它将会读取流中的第一个字,并将剩下的字符串和\n字符留在那里其中getline()用于其分隔符。因此,下次调用getline()时,它将自动从流中提取字符串的其余部分而不请求用户输入。我想这可能就是你所看到的。