我对 c++ 很陌生。我遇到了一个奇怪的错误,我已经盯着它看了好几个小时,但我不确定我做错了什么。我的类有三个构造函数,它们应该做同样的事情。但是,在它们上运行一个函数似乎会输出不同的格式结果。
这是我的测试:
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
被调用的两个构造函数是:1。
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);
}
我不知道如何开始调试它。在第二个构造函数中,mat[16] 的值与 data[16] 完全相同。
任何关于我做错了什么的想法将不胜感激!谢谢!
编辑::修复!
啊哈!我设法通过将第二个构造函数中的“mat [16]”移动到头文件中来修复它。
也许 Mat 构造函数使用通过引用而不是值传递?
IE
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];
}