【问题标题】:vector to non vector assignment in cpp [closed]cpp中的向量到非向量赋值[关闭]
【发布时间】:2016-09-12 17:09:04
【问题描述】:

data *c=it; 出现错误。我只需要检索一个值。

class X
{
    string value4;
    vector<data> *T1;
}
class data
{
    string value1;
    int value2;
}
void doTask(X V1)
{
    vector<data> *tempdata=V1.getData();
    for (std::vector<data>::iterator it = tempdata->begin() ; it !=tempdata->end(); ++it)
    {
              data *c=it;
              sendData(value3,c);
    }
}
 void sendData(string s,data d)
{

}

我收到此错误:

错误:无法转换 'std::vector::iterator {aka __gnu_cxx::__normal_iterator >}' 到 'data*' 在初始化

我是这个矢量用法的新手。有人可以帮我吗?

【问题讨论】:

  • 为什么你认为std::vector::iterator 可以分配给data*
  • 向量不存储指向data的指针而是实例,因此将c这样的变量设为指针是没有意义的。
  • –1不是真正的代码。例如,没有分号的类定义将无法编译。
  • 投票结束,因为缺乏可重复的例子。
  • 另外,拥有一个指向向量的指针通常也没有多大意义。 C++ 发展得越多,需要的指针就越少。

标签: c++ loops object vector iterator


【解决方案1】:

你必须取消对迭代器的引用来获得对所包含项类型的引用,然后获取它的地址来获得一个指针:

data *c = &*it;

【讨论】:

  • data &amp; c = *it; 甚至更好,sendData(value3, *it);
  • 是的。另外,sendData 应该有一个指向 d 的指针。
  • 不,应该是参考。除非你有充分的理由 d 可能为空。 void sendData(const std::string &amp; s, const data &amp; a)
  • 好吧,要么函数应该接受一个引用,并且应该将引用传递给它,或者函数应该接受一个指针,并且应该将一个指针传递给它。
  • 但是对 sendData 的调用与问题所询问的错误消息没有直接关系。
猜你喜欢
  • 1970-01-01
  • 2020-11-02
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多