我有课
class Item
{
private:
string name;
public:
void set_data()
{
getline(cin, name);
}
}
从主要功能我设置名称的值一次,但是当我想给它另一个值时,我不能。我的意思是第二次从同一个对象调用函数时,它什么也没做。
答案 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()
,以便我输入内容并点击返回。然后它继续正常。我添加了一个文本提示,因此在控制台中看到它不那么令人困惑。我明白了:
这会以某种方式回答您的问题吗?如果你在main()
中做了其他事情,那么尝试将其剥离回到这个简单的操作,然后重新添加其他内容,直到找到引入问题的位。
<强>更新强>
根据下面的评论提示,如果您在std::cin >>
的另一次调用之前放置getline()
,它将会读取流中的第一个字,并将剩下的字符串和\n
字符留在那里其中getline()
用于其分隔符。因此,下次调用getline()
时,它将自动从流中提取字符串的其余部分而不请求用户输入。我想这可能就是你所看到的。