C++ C++;:迭代器错误仅适用于两种相同情况之一

C++ C++;:迭代器错误仅适用于两种相同情况之一,c++,vector,iterator,C++,Vector,Iterator,我使用迭代器以完全相同的方式循环(几乎)相同的字符串对象,而第二个对象不断返回错误。我觉得自己很愚蠢,我是不是错过了什么 #include <string> #include <vector> using namespace std; struct Sentence { string text; Sentence(const string& text) : text{text} { for (string::const_iter

我使用迭代器以完全相同的方式循环(几乎)相同的字符串对象,而第二个对象不断返回错误。我觉得自己很愚蠢,我是不是错过了什么

#include <string>
#include <vector>

using namespace std;

struct Sentence
{
  string text;
  Sentence(const string& text)
      : text{text}
  {
    for (string::const_iterator it = text.cbegin(); it != text.cend(); ++it)
    {
      // Actions: WORKS FINE:
    }
  }

  string str() const
  {
    for (string::const_iterator it = text.cbegin(); it != text.cend(); ++it)
    {
      // Actions: RETURNS ERROR: Process finished with exit code 132 (interrupted by signal 4: SIGILL)
    }
  }
};

int main()
{
  vector<Sentence> vec;
  vec.push_back(Sentence{""});
  vec[0].str();
  return 0;
}
#包括
#包括
使用名称空间std;
结构句
{
字符串文本;
句子(常量字符串和文本)
:text{text}
{
for(string::const_迭代器it=text.cbegin();it!=text.cend();++it)
{
//行动:工作正常:
}
}
字符串str()常量
{
for(string::const_迭代器it=text.cbegin();it!=text.cend();++it)
{
//操作:返回错误:进程结束,退出代码132(被信号4:SIGILL中断)
}
}
};
int main()
{
向量向量机;
向量推回(句子{“});
vec[0].str();
返回0;
}
正如您在这里看到的,您的
str()
被声明为返回一个
std::string
,但实际的代码并不
返回任何内容

这被称为“未定义的行为”,从这一点上,您无法期望任何有意义的结果

您需要修复此
str()
方法,以便它们要么声明为返回
void
,要么实际正确返回
std::string

所有现代C++编译器都会发出关于这个常见错误的警告或诊断消息。如果编译器在编译代码时生成警告消息,这将是一个不忽略编译器中任何类型的消息的示例。如果没有从编译器中获得任何消息,请检查其设置和命令行选项,并打开所有警告消息,或升级编译器

正如您在这里看到的,您的
str()
被声明为返回一个
std::string
,但实际的代码并不
返回任何内容

这被称为“未定义的行为”,从这一点上,您无法期望任何有意义的结果

您需要修复此
str()
方法,以便它们要么声明为返回
void
,要么实际正确返回
std::string


所有现代C++编译器都会发出关于这个常见错误的警告或诊断消息。如果编译器在编译代码时生成警告消息,这将是一个不忽略编译器中任何类型的消息的示例。如果没有从编译器中获得任何消息,请检查其设置和命令行选项,并打开所有警告消息,或升级编译器。

如果删除
向量
,该怎么办?顺便说一句:如果启用警告,编译器将告诉您错误所在。调试器抛出以下命令:EXC\u BAD\u指令(code=EXC_I386_INVOP,subcode=0x0)如果删除
向量怎么办?顺便说一句:如果启用了警告,编译器会告诉您出了什么问题。调试器抛出以下命令:EXC_BAD_指令(code=EXC_I386_INVOP,subcode=0x0)好的。这确实是件愚蠢的事情……迷失在细节中而忘记了基本的东西:D。非常感谢山姆。好的。这确实是件愚蠢的事情……迷失在细节中而忘记了基本的东西:D。非常感谢山姆。
  string str() const