繁体   English   中英

无法转换 'std::vector<double> *' 到 '__gnu_cxx::__alloc_traits <std::allocator<double*> , double*&gt;::value_type' {aka 'double*'} </std::allocator<double*></double>

[英]cannot convert ‘std::vector<double>*’ to ‘__gnu_cxx::__alloc_traits<std::allocator<double*>, double*>::value_type’ {aka ‘double*’}

我无法在 main.h 中将 double 转换为 double 我有:

std::vector<std::vector<double>> *m_va;

std::vector<std::vector<double> > *get_ptr() { return m_va; }

在 main.cpp 我想要:

std::vector<double *> F(n);

F[i] = this->get_ptr()[j].data();

但我得到:无法将 'std::vector ' 转换为 '__gnu_cxx::__alloc_traitsstd::allocator<double*, double >::value_type' {aka 'double*'}

混合 C 和 C++ 方法时要小心。

std::vector是 object 并且您不能将指向该 object 的指针视为指向底层缓冲区的指针。

您的get_ptr()方法返回指向向量的指针,而不是向量本身或对它的引用,因此括号不会映射为对*m_vaoperator[]的调用,而是作为*(m_va + j) (在您的情况下,这可能会导致未定义的行为)。

然后在假定存在于该位置的std::vector<std::vector<double>>上调用data()将返回一个指向底层缓冲区开头的指针,其中内容的类型为std::vector<double> (因此这个指针的类型是std::vector<double>*这就是你得到那个编译错误的原因)。

F[i] = (*(this->get_ptr()))[j].data();

将解决问题,这相当于

F[i] = this->get_ptr()->operator[](j).data();

正如个人建议一样,请注意您在做什么,您将 STL 容器保存的原始指针存储在另一个 object 中,如果在*m_va的任何元素中发生重新分配,则F的内容将变为无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM