错误:“double”不是类、结构或联合类型 [关闭]
Posted
技术标签:
【中文标题】错误:“double”不是类、结构或联合类型 [关闭]【英文标题】:error: ‘double’ is not a class, struct, or union type [closed] 【发布时间】:2013-06-02 20:13:55 【问题描述】:我遇到了这个问题,我收到了一段非常敏感的代码,它应该将 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
我真的很感谢你的帮助, 胺
编辑1: 这是我认为导致它的代码 sn-p:
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;
谢谢
【问题讨论】:
第 69 行是什么?knownFaces
是什么?
你的for
循环永远不会执行。
“非常敏感的一段代码”是什么意思?
看了一下,我猜他是在用“敏感”作为“脆弱”的同义词;)
【参考方案1】:
错误消息是您尝试使用 2 double
s 初始化 std::vector
的结果:
std::vector<Something> x(somedouble, otherdouble);
std::vector
认为这些双精度值是输入迭代器,指定了它应该加载的范围。
由于您发布的代码中没有出现类似的情况,我们只能猜测实际问题。您需要制作一个能够准确重现您的问题的最小示例,并将整个代码发布到一个新问题中。
EDIT1:是的,它是:response[k+1] = pos[k].x,pos[k].y;
由于x
和y
是双精度而不是浮点数,因此您触发了两个迭代器构造函数来创建一个临时向量以分配给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);
【讨论】:
以上是关于错误:“double”不是类、结构或联合类型 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
C++ 成员引用基类型'Vertex *const'不是结构或联合