2

非常に機密性の高いコードを受け取ったという問題があります。これは、ネストされたベクトルに 70 の x、y 座標のセットを格納し、後でそれを float 配列に変換することになっています。ここにあります:

 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};
        }

ありがとうございました

4

1 に答える 1

3

エラー メッセージは、std::vector2double秒で a を初期化しようとした結果です。

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

std::vectorこれらの double は、ロード元となる範囲を指定する入力イテレータであると考えています。

投稿されたコードにはそのようなものは表示されないため、実際の問題については推測することしかできません。問題を正確に再現する最小限の例を作成し、コード全体を新しい質問に投稿する必要があります。

EDIT1:はい、そこにあります:とは float ではなく double であるresponse[k+1] = {pos[k].x,pos[k].y};ため、2 つのイテレータ コンストラクタをトリガーして、初期化リスト コンストラクタの代わりに割り当てる一時的なベクトルを作成しています。行を次のように変更しますxyresponse[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)};
于 2013-06-02T20:21:45.423 に答える