Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
构造函数正在初始化时更改值? 我对C++比较陌生。我遇到了一个奇怪的虫子,我盯着它看了好几个小时,我不知道我做错了什么。我的类有三个构造函数,它们应该做同样的事情。但是,在它们上运行函数似乎会输出不同格式的结果_C++_Opencv_Constructor_Mat - Fatal编程技术网

构造函数正在初始化时更改值? 我对C++比较陌生。我遇到了一个奇怪的虫子,我盯着它看了好几个小时,我不知道我做错了什么。我的类有三个构造函数,它们应该做同样的事情。但是,在它们上运行函数似乎会输出不同格式的结果

构造函数正在初始化时更改值? 我对C++比较陌生。我遇到了一个奇怪的虫子,我盯着它看了好几个小时,我不知道我做错了什么。我的类有三个构造函数,它们应该做同样的事情。但是,在它们上运行函数似乎会输出不同格式的结果,c++,opencv,constructor,mat,C++,Opencv,Constructor,Mat,这是我的测试: 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();

这是我的测试:

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";
    }
}
被调用的两个构造函数是: 一,

及 2.

Box::Box(const vector和poseAndSize){
//假设poseAnDSize[0,1,2]=尺寸[3-19]=材料
boxSize=NetworkingUtils::Vec3f(poseAndSize.at(0)、poseAndSize.at(1)、poseAndSize.at(2));
浮垫[16];
对于(int i=0;i<16;i++){
mat[i]=poseAndSize.at(i+3);
}
姿势=cv::垫(4,4,cv_32FC1和垫);
}
我不知道如何开始调试这个。在第二个构造函数中,mat[16]的值与data[16]的值完全相同

任何关于我做错了什么的想法都将不胜感激!! 谢谢

编辑::修正! 啊哈! 我通过将第二个构造函数中的“mat[16]”移动到头文件中来修复它

也许Mat构造函数使用传递引用而不是值

i、 e

类框{
公众:
Box();
盒子(cv::Mat m,NetworkingUtils::Vec3f s):姿势(m),盒子大小(s){};
框(常量向量和poseAndSize);
cv::垫式;
NetworkingUtils::Vec3f boxSize;
私人:
浮垫[16];
}

谢谢你的帮助!我认为我们不大可能看到
类(可能是整个类)。它看起来不太公开。请提供一个独立的片段来重现这个问题。这看起来是一个非常复杂的情况。我认为问题在这里
mattest2(4,4,CV_32FC1,&data)。它应该是
mattest2(4,4,CV_32FC1,数据)。同时纠正这个
pose=cv::Mat(4,4,cv_32FC1,&Mat)@WhozCraig,Box类可以在这里找到:Box.h Box.cpp@sgar91,更改似乎要重新编译,但输出中没有任何更改。我想这可能是一个范围问题。例如,如果我添加:
vector pts=getCubePoints()到第二个构造函数的最后一行,它似乎有正确的输出。但不在test()函数的范围内。@dran11两个链接都已断开。我想你是对的,但是没有看到他们很难说。
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
Box(cv::Mat m,NetworkingUtils::Vec3f s):pose(m),boxSize(s){};
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);
}
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];
}