【问题标题】:Vector Iterator Errors With a Vector of Type Struct结构类型向量的向量迭代器错误
【发布时间】:2013-04-15 18:37:38
【问题描述】:

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

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

【问题讨论】:

    标签: c++ vector struct iterator


    【解决方案1】:

    试试……

    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,但是无论使用-&gt; 运算符,您都应该能够访问这些成员变量。

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

    【讨论】:

    • 实际上,我最初尝试过,但它也给了我一个错误。在 cout 之后的第一个
    • it-&gt;need 是什么类型?我认为这是因为it-&gt;need 的类型没有std::ostream &amp;operator&lt;&lt; 的定义;换句话说,它是不可打印的。
    【解决方案2】:

    问题是*it 是process 类型,您可以尝试在转换前通过更改获取其地址

    (static_cast<process*>(*it).need)
    

    到

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

    不过,it-&gt;need 可能更简单

    顺便说一句,如果你只是打印(而不是修改vector的内容),那么建议使用const_iterator而不是iterator。

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 2017-12-29
      • 2021-11-24
      相关资源
      最近更新 更多