所以,我目前正在开展OOP流程图项目。
这里要指出的是,我想确保程序不会在彼此之间绘制2个形状“以及窗口边界”,所以我应该给出一个IF条件,以便在其中,程序引入界面!
这是我的代码的一部分。
case ADD_START:
pO->PrintMessage("Action: add start statement, Click anywhere in the drawing Area");
Statement*statS;
pIn->GetPointClicked(P);
if ( (for (int i = 0; i < NumOfFigures; i++)
{ //Test
i == NumOfFigures;
} )
&& (P.x>30) && (P.x< UI.width-(30+UI.ELLIPSE_R1)) && (P.y>2*UI.TlBrWdth+3)
&& (P.y<UI.height - (UI.StBrWdth+UI.ELLIPSE_R2)) )
{
statS=new Start();
statS->setPoint(P);
statS->DrawStatement(pO,pIn);
pStat[NumOfFigures] = statS;
NumOfFigures++;
}
break;
在这里你可以看到pStat
是指向抽象类Statement
的指针数组,但是,我想将运行时绘制的形状的地址添加到指针数组中,因此,在if
条件下,我可以创建一个for
循环来检查该数组中每个形状的边界,以检查P(这是一个点)
P.x != pStat[NumOfFigure]->x;
但是这里的问题是它给for
语句中的if
循环错误,说
ERROR : Expected an expression "
我该怎么办?
答案 0 :(得分:3)
您所遵循的语法是无效的语法,用于比较循环
中的值集合您可以在单独的循环中测试NumOfFigures
并维护一些flag
变量,并使用该变量在if
条件中进行比较
bool flag=true;
for (int i = 0; i < NumOfFigures; i++)
{
//Test
if(i != figuresArray[i]){ //here you'l need to use your array from where you want to compare values
flag=false;
break;// its not matching, so break loop to test for further values
}
}
//use flag variable in your if condition
if (flag==true && (P.x>30) && (P.x< UI.width-(30+UI.ELLIPSE_R1)) && (P.y>2*UI.TlBrWdth+3)
&& (P.y<UI.height - (UI.StBrWdth+UI.ELLIPSE_R2)) )
{
statS=new Start();
statS->setPoint(P);
statS->DrawStatement(pO,pIn);
pStat[NumOfFigures] = statS;
NumOfFigures++;
}
答案 1 :(得分:0)
您无法在任何条件语句中添加loop
。这个概念是你可以检查任何条件,如果它是真的做某事,如果没有,做其他事情。
if( /*expression*/){
//do something, including method call, looping construct etc.
}
else if( /*another condition*/){
//do some other thing
}
//..... other condition
else{
// do something
}
修改强>
在loop
块内写if
:
if( condition ){
for( int i=0;i<NumOfFigures;i++)
{
statS=new Start();
statS->setPoint(P);
statS->DrawStatement(pO,pIn);
pStat[i] = statS; // should be i , not numOfFigures
}
}