【问题标题】:C++ reverse_iterator errorC++ reverse_iterator 错误
【发布时间】:2017-08-02 08:31:03
【问题描述】:

我正在尝试对我的向量使用 reverse_iterator,显然这行代码会导致 3 个错误。

#include <iostream>    
#include <vector>
using namespace std;
vector<string> list={};
vector<string> reverse_iterator rit = list.rbegin();

错误:

  1. 应为“;”
  2. 错误 C2146 语法错误:缺少 ';'在标识符“rit”之前
  3. 错误 C2065 'rit':未声明的标识符

我正在使用 Visual Studio 2015 控制台应用程序。

【问题讨论】:

  • 试试vector&lt;string&gt;::reverse_iterator rit = list.rbegin();
  • 这里是使用 C++11 中引入的类型推断功能的一个非常好的地方:auto rit = list.rbegin();
  • @songyuanyao 当我添加两个冒号时,它又打印了 25 个错误
  • 顺便提一下,当拥有using namespace std; 并使用诸如list 之类的通用名称时要小心。请记住,有一个std::list 类,所以如果你包含&lt;list&gt;,你会遇到命名冲突。另外,调用向量list 有点误导,不是吗?
  • std::list 是 C++ 中的保留类,因此不能将其用作变量名

标签: c++ visual-studio visual-c++ vector reverse-iterator


【解决方案1】:

你应该先定义你的向量变量:

std::vector<string> mylist (5);

然后使用 reverse_iterator :

std::vector<string>::reverse_iterator rit = mylist.rbegin();

更新:

如果你输入using namespace std; 那么当你编译你的代码时

你会发现list={}的问题

因为listnamespace std 中的保留 类,所以在定义vector 时不能将其用作变量名。

要解决这个问题,你可以简单地给它另一个名字,比如mylist

另一种方式:

如果你不放using namespace std;

将你的向量声明为list没有问题

您可以通过这种方式进行操作,它会按照您的预期编译和工作:

  std::vector<std::string> list={};
  std::vector<std::string>::reverse_iterator rit = list.rbegin(); 

我希望这将帮助您解决您的错误。

【讨论】:

  • std::liststd 中的其他任何内容一样“保留”。这就是您不使用using namespace std; 的原因之一。去掉using namespace std;list就可以了。
  • @ChristianHackl 你说得对,谢谢你的留言,如果你觉得有用的话,我已经更新了我的答案投票
猜你喜欢
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2012-07-14
  • 2011-12-12
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多