矢量Iterator错误与矢量类型结构

时间:2013-04-15 18:37:38

标签: c++ vector struct iterator

我正在尝试使用矢量迭代器打印出矢量中的所有元素。我查了类似的问题,但发布的解决方案似乎对我不起作用。这是代码:

void printPerms()
{
   for(vector<process>::iterator it = allProcesses.begin(); it != allProcesses.end(); it++)
   {
      for(int i = 0; i < numResourceTypes; i++)
      {
         cout << (static_cast<process*>(*it).need) << (static_cast<process>(*it)).allocated <<endl;
      }
   }
}

我得到的错误,我不知道如何解决:

error C2440: 'static_cast' : cannot convert from 'process' to 'process *' No user
defined-conversion operator available that can perform this conversion, or the operator
cannot be called

error C2228: left of '.need' must have class/struct/union

2 个答案:

答案 0 :(得分:6)

...试

void printPerms()
{
   for(vector<process>::iterator it = allProcesses.begin(); it != allProcesses.end(); it++)
   {
      for(int i = 0; i < numResourceTypes; i++)
      {
         cout << it->need << it->allocated << endl;
      }
   }
}

我不知道到底出了什么问题,也不知道为什么需要使用static_cast,但无论使用->运算符,都应该能够访问这些成员变量。< / p>

取消引用迭代器会为您提供其值(在本例中为process),而不需要强制转换。

答案 1 :(得分:1)

问题是*it的类型为process,您可以尝试在转换之前通过更改

来获取其地址
(static_cast<process*>(*it).need)

((static_cast<process*>(&(*it)))->need)

但是,it->need

可能更简单

顺便说一下,如果您只是打印(而不是修改vector内容),则建议使用const_iterator代替iterator