Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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++;Microsoft Kinect代码-尝试动态分配目标位置数组_C++_Arrays_Kinect_Dynamic Arrays - Fatal编程技术网

C++ C++;Microsoft Kinect代码-尝试动态分配目标位置数组

C++ C++;Microsoft Kinect代码-尝试动态分配目标位置数组,c++,arrays,kinect,dynamic-arrays,C++,Arrays,Kinect,Dynamic Arrays,因此,我试图修改Kinect BodyBasicsD2D代码,以便在屏幕上显示固定数量的“目标位置”(如椭圆),供用户将手移向。我在创建初始目标位置时遇到问题 这是我在头文件中用于分配目标位置数组的代码(这些是CBodyBasics类的公共字段,已内置于原始BodyToBasics程序中): 然后我有一个函数“GenerateTargetPositions”,它应该生成3个目标位置,在本例中,目标位置将被传递到“DrawTargetPositions”函数中 void CBodyBasics::

因此,我试图修改Kinect BodyBasicsD2D代码,以便在屏幕上显示固定数量的“目标位置”(如椭圆),供用户将手移向。我在创建初始目标位置时遇到问题

这是我在头文件中用于分配目标位置数组的代码(这些是CBodyBasics类的公共字段,已内置于原始BodyToBasics程序中):

然后我有一个函数“GenerateTargetPositions”,它应该生成3个目标位置,在本例中,目标位置将被传递到“DrawTargetPositions”函数中

void CBodyBasics::GenerateTargetPositions(D2D1_POINT_2F * targetPositions, int numTargets)
{
    targetPositions = new D2D1_POINT_2F[numTargets];
    RECT rct;
    GetClientRect(GetDlgItem(m_hWnd, IDC_VIDEOVIEW), &rct);
    int width = rct.right;
    int height = rct.bottom;
    FLOAT x;
    FLOAT y;
    D2D1_POINT_2F tempPoint;

    for (int i = 0; i < numTargets; i++) {
        x = 1.0f*i*width / numTargets;
        y = 1.0f*i*height / numTargets;
        tempPoint = D2D1::Point2F(x, y);
        targetPositions[i] = tempPoint;
    }

}
void CBodyBasics::GenerateTargetPositions(D2D1_POINT_2F*targetPositions,int numTargets)
{
targetPositions=新的D2D1_点_2F[numTargets];
RECT-rct;
GetClientRect(GetDlgItem(m_hWnd,IDC_VIDEOVIEW)和rct);
int width=rct.right;
内部高度=rct底部;
浮动x;
浮动y;
D2D1_点_2F温度点;
对于(int i=0;i
我的DrawTargetPositions功能是:

void CBodyBasics::DrawTargetPositions(D2D1_POINT_2F * targetPositions, int numTargets)
{
    D2D1_ELLIPSE ellipse;
    for (int i = 0; i < numTargets; i++) 
    {
        ellipse = D2D1::Ellipse(targetPositions[i], 50.f, 50.f);
        m_pRenderTarget->FillEllipse(ellipse, m_pSilverBrush);
    }
}
void CBodyBasics::DrawTargetPositions(D2D1_POINT_2F*targetPositions,int numTargets)
{
D2D1_椭圆;
对于(int i=0;iFillEllipse(椭圆,m_pSilverBrush);
}
}
当我试图运行我的代码时,我得到一个错误,即“targetPositions”和“targetPositions[I]”都为NULL(因此我的GenerateTargetPositions函数一定不能正常工作)。我相信targetPositions[I]是一个结构(一个具有x和y值的点),所以我想知道这是否是我出错的原因

在我的代码中,我在主“while”循环之前调用GenerateTargetPositions和DrawTargetPositions,这样每个函数就不会在每次迭代中被调用(通过while循环有很多次迭代,因为这是一个交互式的Microsoft Kinect,记录一个人的动作)


如有任何建议,将不胜感激。非常感谢

欢迎来到堆栈溢出。请花时间阅读并参考您可以在此处询问的内容和方式。通过
D2D1_点_2F*targetPositions
然后
targetPositions=new D2D1_点_2F[numTargets]不做您认为它做的事情。但是,您应该使用
std::vector
std::array
anyway@UnholySheep谢谢我有#包括使用名称空间std;包括在我的文件的顶部。你知道我如何解决这个问题吗?我也尝试过静态分配数组,但没有太多运气。最简单(但肯定不是最好)的修复方法是将
GenerateTargetPositions(D2D1\u POINT\u 2F*targetPositions,int numTargets)
更改为
GenerateTargetPositions(D2D1\u POINT\u 2F*&targetPositions,int numTargets)
(通过
&
可以确保您确实修改了传入的指针)。不过,您应该仔细研究
std::vector
std::array
(不确定您所说的“在没有太多运气的情况下静态分配数组”是什么意思,您需要在尝试自己调试之后发布实际的代码)
void CBodyBasics::DrawTargetPositions(D2D1_POINT_2F * targetPositions, int numTargets)
{
    D2D1_ELLIPSE ellipse;
    for (int i = 0; i < numTargets; i++) 
    {
        ellipse = D2D1::Ellipse(targetPositions[i], 50.f, 50.f);
        m_pRenderTarget->FillEllipse(ellipse, m_pSilverBrush);
    }
}