错误:' double '不是类、结构或联合类型

error: ‘double’ is not a class, struct, or union type

本文关键字:结构 类型 double 错误      更新时间:2023-10-16

我遇到了这个问题,我收到了一段非常敏感的代码,它应该在一个嵌套的向量中存储70 x,y协调集,然后将其转换为浮点数组;

 vector<vector<vector<float> > > KnownPoints ;
 float* returnPoint = new float[knownFaces.size()*70*2];
    for(int i=0;i<KnownPoints.size();i++){
        for(int k=0;k<KnownPoints[i].size();k++){
           returnPoint[i*70*2+k*2] = KnownPoints[i][k][0];
           returnPoint[i*70*2+k*2+1] = KnownPoints[i][k][1];
        }
    }

但是我一直得到这些错误:

/usr/include/c++/4.7/bits/stl_vector.h:1147:24:   required from ‘void std::vector<_Tp, _Alloc>::_M_initialize_dispatch(_InputIterator, _InputIterator, std::__false_type) [with _InputIterator = double; _Tp = float; _Alloc = std::allocator<float>]’
/usr/include/c++/4.7/bits/stl_vector.h:393:4:   required from ‘std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = double; _Tp = float; _Alloc = std::allocator<float>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<float>]’
LibEmotion.cpp:69:47:   required from here
/usr/include/c++/4.7/bits/stl_iterator_base_types.h:166:53: error: ‘double’ is not a class, struct, or union type
/usr/include/c++/4.7/bits/stl_iterator_base_types.h:167:53: error: ‘double’ is not a class, struct, or union type
/usr/include/c++/4.7/bits/stl_iterator_base_types.h:168:53: error: ‘double’ is not a class, struct, or union type
/usr/include/c++/4.7/bits/stl_iterator_base_types.h:169:53: error: ‘double’ is not a class, struct, or union type
/usr/include/c++/4.7/bits/stl_iterator_base_types.h:170:53: error: ‘double’ is not a class, struct, or union type
如果有人伸出援助之手,我会很感激的。胺

Edit1:以下是我认为导致它的代码片段:

vector<cv::Point> pos;
vector<vector<float> > response;
for (int k = 0; k < pos.size(); k++) {
            response[k+1] = {pos[k].x,pos[k].y};
        }

谢谢

错误消息是您试图用2个double s初始化std::vector的结果:

std::vector<Something> x(somedouble, otherdouble);

std::vector认为这些双精度对象是输入迭代器,指定了它应该加载的范围。

因为在你发布的代码中没有出现这样的东西,我们只能猜测实际的问题。你需要做一个最小的例子,精确地再现你的问题,并在一个新的问题中发布整个代码。

EDIT1:是的,它是:response[k+1] = {pos[k].x,pos[k].y};由于xy是双精度而不是浮点数,您触发双迭代器构造函数来创建一个临时向量来分配给response[k+1],而不是初始化列表构造函数。将行改为

response[k+1].push_back(pos[k].x);
response[k+1].push_back(pos[k].y);

response[k+1] = {float(pos[k].x), float(pos[k].y)};