【问题标题】:Cant create std::string from one of two sources with same types无法从具有相同类型的两个源之一创建 std::string
【发布时间】:2011-08-22 12:27:59
【问题描述】:

为什么最后一行不起作用?

ostringstream stream;
int f = 12345;
stream << f;
string st = stream.str();
cout << typeid(st.rbegin()).name() << endl;
cout << typeid(stream.str().rbegin()).name() << endl;
cout << string(st.rbegin(), st.rend()) << std::endl;
cout << string(stream.str().rbegin(), stream.str().rend()) << endl;

ir 说:“字符串迭代器不兼容”,但类型相同。

【问题讨论】:

  • 添加适当的头文件时,这里编译和运行良好,所以也许你应该至少告诉我们完整/真实的错误消息以及你使用什么编译器来尝试它。
  • @PlasmaHH 我不认为这是语法错误,只是一个好的编译器发现了代码中的缺陷,请参阅我的答案。

标签: c++ string stl iterator


【解决方案1】:

调用ostringstream::str() 方法会创建一个新的字符串对象,因此您使用的是来自两个不同对象的迭代器。

要解决此问题,请将字符串存储在临时变量中:

string temp = stream.str();
cout << string(temp.rbegin(), temp.rend()) << endl;

你已经对 st 变量做了什么。

【讨论】:

    【解决方案2】:

    str 按值返回一个字符串,这意味着stream.str() 的两次调用不会引用内存中的相同字符串。因此它们的迭代器将不兼容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多