gpt4 book ai didi

c++ - 从范围外访问局部变量c++

转载 作者:行者123 更新时间:2023-11-30 02:49:53 26 4
gpt4 key购买 nike

我有一个具有局部变量(posX 和 posY)的函数 (trackObject)。

在该函数内部有两个函数调用取决于这两个变量。(checkIntersection 和 checkHit)。

如果我编译程序,程序运行良好但有延迟。

我想在 trackObject 之外调用这两个函数,但是无法访问这两个局部变量。我想访问它,但我不知道如何访问它。

我尝试将这些变量设为全局变量,但将这些变量设为全局变量会使其他变量(力矩、力矩 10、力矩 01 和面积)也必须设置为全局变量。

但是当我这样做时,我得到堆损坏异常。

有人知道怎么做吗?或者还有其他解决方案吗?

这是我的代码

void trackObject(IplImage* imgThresh){
// Calculate the moments of 'imgThresh'
CvMoments *moments = (CvMoments*)malloc(sizeof(CvMoments));
cvMoments(imgThresh, moments, 1);
double moment10 = cvGetSpatialMoment(moments, 1, 0);
double moment01 = cvGetSpatialMoment(moments, 0, 1);
double area = cvGetCentralMoment(moments, 0, 0);

// if the area<1000, I consider that the there are no object in the image and it's because of the noise, the area is not zero
if(area>1000){
// calculate the position of the ball
int posX = moment10/area;
int posY = moment01/area;

if(lastX>=0 && lastY>=0 && posX>=0 && posY>=0)
{
// Draw a yellow line from the previous point to the current point
cvLine(imgTracking, cvPoint(posX, posY), cvPoint(lastX, lastY), cvScalar(0,0,255), 4);

}
checkIntersection(300, lastY, posY);
checkHit(posX,posY,lastX,lastY,startLineX, startLineY, endLineX, endLineY);
lastX = posX;
lastY = posY;
}
cvLine(imgTracking,cv::Point(100,300) , cv::Point(600,300),cv::Scalar(0,200,0),2,8);
cvLine(imgTracking,cv::Point(100,400) , cv::Point(168,400),cv::Scalar(255,0,122),8,8);
cvLine(imgTracking,cv::Point(171,400) , cv::Point(239,400),cv::Scalar(255,0,122),8,8);
cvLine(imgTracking,cv::Point(241,400) , cv::Point(309,400),cv::Scalar(255,0,122),8,8);
cvLine(imgTracking,cv::Point(312,400) , cv::Point(380,400),cv::Scalar(255,0,122),8,8);
cvLine(imgTracking,cv::Point(383,400) , cv::Point(451,400),cv::Scalar(255,0,122),8,8);
cvLine(imgTracking,cv::Point(454,400) , cv::Point(522,400),cv::Scalar(255,0,122),8,8);
cvLine(imgTracking,cv::Point(525,400) , cv::Point(600,400),cv::Scalar(255,0,122),8,8);
free(moments);
}

最佳答案

使用指针将它们复制到调用函数的变量中:

void trackObject(IplImage* imgThresh, int *pX, int *pY)
{
...

*pX = moment10 / area;
*pY = moment01 / area;

...
}

调用函数需要一些 int 来存储这些值:

IplImage imgThresh;
int copyX, copyY;

trackObject(&imgThresh, &copyX, &copyY);

关于c++ - 从范围外访问局部变量c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20870429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com