【问题标题】:why the getline function isn't recognizing it as a string?为什么 getline 函数不将其识别为字符串?
【发布时间】:2015-12-08 15:37:12
【问题描述】:

有一个名为children 的指针结构,其中有两个指针,name 和age。

employees[i].children[j].name = new string();
employees[i].children[j].age = new int[1];
cout << "WRITE THE NAME OF THE DEPENDENT " << j+1 << endl;
getline(cin,employees[i].children[j].name);

这给了我这个错误:没有匹配函数调用'getline(std::istream&, std::string*&)'

【问题讨论】:

  • 将指针指向您不打算分享的单一事物几乎总是错误的。很可能您应该将string *nameint *age 替换为string nameint age,因为您不需要那里的其他间接级别。
  • 因为根据您的代码示例,它不是string,而是一个指向string指针。正如其他人所说,最好不要让它成为指针。使用string name; 而不是string* name;age 也一样。然后你就完全不用担心name = new string(); 部分了。

标签: c++ memory-management getline


【解决方案1】:

name 字段是一个指向字符串的指针。你需要使用:

getline(cin,*(employees[i].children[j].name));

【讨论】:

  • 更有可能name 应该是std::stringage 应该是int(基于名称;为什么age 会不止一个int?)
  • name 是一个直接的对象可能更有意义,我想不出一个原因 age 需要是一个数组。然而,我个人不喜欢人们事后猜测我是如何编写代码的。也许他是从他无法修改的地方(第三方软件或教授)获取他的数据结构。我只是在回答他提出的问题。
  • 在我看来,这些建议充其量是有帮助的,你会学到一些东西。在最坏的情况下,您知道它们不适用,并且您会浪费几秒钟的时间阅读它们。这假设实际给出了原始问题的答案。
  • @chris 你是绝对正确的,当被表述为一个建议时(就像你的建议一样)我认为这样的 cmets 会非常有帮助。我希望我在之前的评论中不要太粗鲁。我刚刚在路径中看到了大量对 stackoverflow 的屈尊俯就。
猜你喜欢
  • 2017-08-18
  • 1970-01-01
  • 2019-10-23
  • 2023-03-04
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
相关资源
最近更新 更多