push_back压入部分值错误

图片说明
Push_back之前 无值
图片说明
Push_back之后 pArray的值
图片说明
Push_back的arrSmallWall 的值 无值
图片说明
m_curWallPart的值
图片说明
m_curWallPart的arrSmallWall的值
图片说明
pArray push_back之后 为什么 nFillSlopeLineNo的值和arrSmallWall的值没压入,而其他值压入了

为什么那么吝惜展示你的代码。不看你的代码天知道你的问题在哪里

bool CZWall::EndSelPart()
{
m_bDrawSelLine = false;
if(m_curWallPart.fEndStat > m_curWallPart.fBeginStat)
{
if(CMMathSys::CompareFloat(m_curWallPart.fBeginStat, m_plRoadbedEdgeLine.begin()->GetX()) < 0)
m_curWallPart.fBeginStat = m_plRoadbedEdgeLine.begin()->GetX();
if(CMMathSys::CompareFloat(m_curWallPart.fEndStat, m_plRoadbedEdgeLine.rbegin()->GetX()) > 0)
m_curWallPart.fEndStat = m_plRoadbedEdgeLine.rbegin()->GetX();
{
double fTempStat = m_curWallPart.fEndStat;
CMPolyline::iterator itRoadbedEdge = m_plRoadbedEdgeLine.FindPoint(m_curWallPart.fBeginStat, 1);
CMPolyline::iterator itSlopeTopBottom = m_plCrestToeLine.FindPoint(m_curWallPart.fBeginStat, 1);
if(itRoadbedEdge != NULL && itSlopeTopBottom != NULL)
{
for(; itRoadbedEdge != m_plRoadbedEdgeLine.end(); itRoadbedEdge++,itSlopeTopBottom++)
{
if(CMMathSys::CompareFloat(itRoadbedEdge->GetY(), itSlopeTopBottom->GetY()) > 0)
{
if(itRoadbedEdge != m_plRoadbedEdgeLine.end()-1 &&
itSlopeTopBottom != m_plCrestToeLine.end()-1 &&
CMMathSys::CompareFloat((itRoadbedEdge+1)->GetY(), (itSlopeTopBottom+1)->GetY()) <= 0)
{
fTempStat = itRoadbedEdge->GetX();
break;
}
}
}
}
m_curWallPart.fEndStat = min(m_curWallPart.fEndStat, fTempStat);
}

    std::vector<_WallPart>* pArray = NULL;
    if(m_curWallPart.nSide == -1)
    {
        pArray = &m_arrLWallPart;
    }
    else if(m_curWallPart.nSide == 1)
    {
        pArray = &m_arrRWallPart;       
    }
    if(pArray != NULL)
    {
        for(std::vector<_WallPart>::iterator it = pArray->begin(); it != pArray->end(); it ++)
        {
            if(CMMathSys::CompareFloat(m_curWallPart.fEndStat, it->fBeginStat) >= 0 &&
                CMMathSys::CompareFloat(m_curWallPart.fEndStat, it->fEndStat) <= 0)
            {
                m_curWallPart.fEndStat = it->fBeginStat;
                break;
            }
            else if(CMMathSys::CompareFloat(m_curWallPart.fBeginStat, it->fBeginStat) <= 0 &&
                CMMathSys::CompareFloat(m_curWallPart.fEndStat, it->fEndStat) >= 0)
            {
                m_curWallPart.fEndStat = it->fBeginStat;
                break;
            }
        }
        if(CMMathSys::CompareFloat(m_curWallPart.fEndStat-m_curWallPart.fBeginStat, 0) > 0)
        {
            if(CreateTopLine(m_nAxesNo, m_curWallPart) &&
                ComputeNewToeLine(m_nAxesNo, m_curWallPart) && 
                CreateSteps(m_nAxesNo, m_curWallPart))
            {
            }
            m_curWallPart.bIsDeal = true;
            pArray->push_back(m_curWallPart);////////////////////////////////
            std::sort(pArray->begin(), pArray->end());
            m_bModified = true;
            m_fActiveStat = (m_curWallPart.fBeginStat+m_curWallPart.fEndStat) * 0.5;
        }
        else
        {
            ofl::CreateMessageBox("段落重叠,不能添加这个段落!", "CARD/1", ICMessageBox::MB_ERROR);
        }
    }
    return true;
}

return true;

}

这是其中的代码 只是一个函数 而且里面牵扯太多的变量

bool CZWall::EndSelPart()
{
m_bDrawSelLine = false;
if(m_curWallPart.fEndStat > m_curWallPart.fBeginStat)
{
if(CMMathSys::CompareFloat(m_curWallPart.fBeginStat, m_plRoadbedEdgeLine.begin()->GetX()) < 0)
m_curWallPart.fBeginStat = m_plRoadbedEdgeLine.begin()->GetX();
if(CMMathSys::CompareFloat(m_curWallPart.fEndStat, m_plRoadbedEdgeLine.rbegin()->GetX()) > 0)
m_curWallPart.fEndStat = m_plRoadbedEdgeLine.rbegin()->GetX();
{
double fTempStat = m_curWallPart.fEndStat;
CMPolyline::iterator itRoadbedEdge = m_plRoadbedEdgeLine.FindPoint(m_curWallPart.fBeginStat, 1);
CMPolyline::iterator itSlopeTopBottom = m_plCrestToeLine.FindPoint(m_curWallPart.fBeginStat, 1);
if(itRoadbedEdge != NULL && itSlopeTopBottom != NULL)
{
for(; itRoadbedEdge != m_plRoadbedEdgeLine.end(); itRoadbedEdge++,itSlopeTopBottom++)
{
if(CMMathSys::CompareFloat(itRoadbedEdge->GetY(), itSlopeTopBottom->GetY()) > 0)
{
if(itRoadbedEdge != m_plRoadbedEdgeLine.end()-1 &&
itSlopeTopBottom != m_plCrestToeLine.end()-1 &&
CMMathSys::CompareFloat((itRoadbedEdge+1)->GetY(), (itSlopeTopBottom+1)->GetY()) <= 0)
{
fTempStat = itRoadbedEdge->GetX();
break;
}
}
}
}
m_curWallPart.fEndStat = min(m_curWallPart.fEndStat, fTempStat);
}

    std::vector<_WallPart>* pArray = NULL;
    if(m_curWallPart.nSide == -1)
    {
        pArray = &m_arrLWallPart;
    }
    else if(m_curWallPart.nSide == 1)
    {
        pArray = &m_arrRWallPart;       
    }
    if(pArray != NULL)
    {
        for(std::vector<_WallPart>::iterator it = pArray->begin(); it != pArray->end(); it ++)
        {
            if(CMMathSys::CompareFloat(m_curWallPart.fEndStat, it->fBeginStat) >= 0 &&
                CMMathSys::CompareFloat(m_curWallPart.fEndStat, it->fEndStat) <= 0)
            {
                m_curWallPart.fEndStat = it->fBeginStat;
                break;
            }
            else if(CMMathSys::CompareFloat(m_curWallPart.fBeginStat, it->fBeginStat) <= 0 &&
                CMMathSys::CompareFloat(m_curWallPart.fEndStat, it->fEndStat) >= 0)
            {
                m_curWallPart.fEndStat = it->fBeginStat;
                break;
            }
        }
        if(CMMathSys::CompareFloat(m_curWallPart.fEndStat-m_curWallPart.fBeginStat, 0) > 0)
        {
            if(CreateTopLine(m_nAxesNo, m_curWallPart) &&
                ComputeNewToeLine(m_nAxesNo, m_curWallPart) && 
                CreateSteps(m_nAxesNo, m_curWallPart))
            {
            }
            m_curWallPart.bIsDeal = true;
            pArray->push_back(m_curWallPart);////////////////////////////////
            std::sort(pArray->begin(), pArray->end());
            m_bModified = true;
            m_fActiveStat = (m_curWallPart.fBeginStat+m_curWallPart.fEndStat) * 0.5;
        }
        else
        {
            ofl::CreateMessageBox("段落重叠,不能添加这个段落!", "CARD/1", ICMessageBox::MB_ERROR);
        }
    }
    return true;
}

return true;

}

这是其中的代码 只是一个函数 而且里面牵扯太多的变量

push_back里的变量里看看有内容没