1

私はc ++にかなり慣れていません。何時間も見つめていた奇妙なバグに遭遇しましたが、何が間違っているのかわかりません。クラスには 3 つのコンストラクターがあり、同じことを行う必要があります。ただし、それらに対して関数を実行すると、異なる形式の結果が出力されるようです。

これは私のテストです:

void test(){
    float t1[19] = {2,2,2,1,0,0,3,0,1,0,3,0,0,1,3,0,0,0,1}; 
    vector<float> testVec;
    testVec.insert(testVec.begin(),t1,t1+19);
    Box a(testVec);
    vector<NetworkingUtils::Vec3f> pts = a.getCubePoints();

    float data[16] = {1,0,0,3,0,1,0,3,0,0,1,3,0,0,0,1};
    Mat test2(4,4,CV_32FC1,&data);
    NetworkingUtils::Vec3f size(2,2,2);
    Box b(test2,size);
    vector<NetworkingUtils::Vec3f> pts2 = b.getCubePoints();

    for (int i =0; i < pts.size(); i ++){
        cout<<"i: " << i <<" Box a:" << pts.at(i) 
            <<"   |  Box b: " << pts2.at(i) << "\n";
    }
}

そしてそれは出力します:

i: 0 Box a:-3.22123e+008 5.7856e-039 -3.22123e+008   |  Box b: 4 4 4
i: 1 Box a:-1.07374e+008 6.93378e-038 -1.07374e+008   |  Box b: 4 4 2
i: 2 Box a:-3.22123e+008 1.15704e-038 -1.07374e+008   |  Box b: 4 2 4
i: 3 Box a:-1.07374e+008 -5.77666e-038 1.07374e+008   |  Box b: 4 2 2
i: 4 Box a:-1.07374e+008 1.15686e-038 -1.07374e+008   |  Box b: 2 4 4
i: 5 Box a:1.07374e+008 5.77667e-038 1.07374e+008   |  Box b: 2 4 2
i: 6 Box a:-1.07374e+008 5.77674e-038 1.07374e+008   |  Box b: 2 2 4
i: 7 Box a:1.07374e+008 -1.15703e-038 3.22123e+008   |  Box b: 2 2 2

呼び出される 2 つのコンストラクターは次のとおりです。

Box(cv::Mat m,NetworkingUtils::Vec3f s):pose(m),boxSize(s){};

そして2。

Box::Box(const vector<float>& poseAndSize){
    //Assumes poseAnDSize[0,1,2] = Size, [3-19] = mat
    boxSize = NetworkingUtils::Vec3f(poseAndSize.at(0),poseAndSize.at(1),poseAndSize.at(2));
    float mat[16];
    for (int i =0; i < 16;i++){
        mat[i] = poseAndSize.at(i+3);
    }
    pose = cv::Mat(4,4,CV_32FC1,&mat);
}

これをデバッグする方法がわかりません。2 番目のコンストラクター内では、mat[16] は data[16] とまったく同じ値を持ちます。

私が間違っていることについてのアイデアは大歓迎です!! ありがとう!

編集::修正済み!

あはは!2番目のコンストラクターの「mat [16]」をヘッダーファイルに移動することで、なんとか修正できました。

おそらく、Mat コンストラクターは、値ではなく参照による受け渡しを使用していますか?

すなわち

class Box{

public:
    Box();
    Box(cv::Mat m,NetworkingUtils::Vec3f s):pose(m),boxSize(s){};
    Box(const vector<float>& poseAndSize);
    cv::Mat pose;
    NetworkingUtils::Vec3f boxSize;

private :
    float mat[16];
}

ご助力いただきありがとうございます!

4

0 に答える 0