Pointers 未处理的异常错误c++;当使用对象的指针IloModel和ILOBJECTION::setLinearCoefs时?

Pointers 未处理的异常错误c++;当使用对象的指针IloModel和ILOBJECTION::setLinearCoefs时?,pointers,visual-c++,cplex,decomposition,rational-team-concert,Pointers,Visual C++,Cplex,Decomposition,Rational Team Concert,我正在编写一个包含场景子问题的分解算法。我使用模型指针创建子问题优化模型。然后,随着算法的进行,需要修改每个子问题的目标函数系数。我使用指针来避免每次从头开始创建子问题模型。代码部分显示如下:;生成子问题模型指针(用于两个场景),然后必须使用ILObjective::setLinearCoefficients更改一个场景子问题的目标函数系数。必须再次解决修改后的子问题: int main (int argc, char **argv) { int ScenearioNum=2;//Numb

我正在编写一个包含场景子问题的分解算法。我使用模型指针创建子问题优化模型。然后,随着算法的进行,需要修改每个子问题的目标函数系数。我使用指针来避免每次从头开始创建子问题模型。代码部分显示如下:;生成子问题模型指针(用于两个场景),然后必须使用ILObjective::setLinearCoefficients更改一个场景子问题的目标函数系数。必须再次解决修改后的子问题:

int main (int argc, char **argv)
{
   int ScenearioNum=2;//Number of scenarios in small example 
   IloEnv env;
   try {

       //Generate the subproblem model pointers:

      IloModel* MaxProblemPtr= new(env) IloModel[ScenearioNum];
      IloObjective* MaxObjPtr= new(env) IloObjective[ScenearioNum];
      for (int s=0;s<ScenearioNum;s++){

         IloModel MaxProblem(env);
         *(MaxProblemPtr+s)=MaxProblem;

          IloObjective MaxObj= IloAdd(MaxProblem, IloMaximize(env));

         *(MaxObjPtr+s)=MaxObj;

          IloRangeArray ConstMax;

          if (s==0){
              ConstMax=IloAdd(MaxProblem,
                               IloRangeArray(env, - IloInfinity,RHS_sub1));
          }else{
              ConstMax=IloAdd(MaxProblem,
                               IloRangeArray(env, - IloInfinity,RHS_sub2));
          }

          for (int j=0;j<2;j++){
               X.add(IloNumVar(MaxObj(1)+ConstMax[0](1)));
               Y.add(IloNumVar(MaxObj(2)+ConstMax[1](1)));
          }

           IloCplex maxcplex(MaxProblem);

           maxcplex.solve();

        if (maxcplex.solve()) {
            double currentObj=maxcplex.getObjValue();
            cout<<"**max Objective function for s"<<s+1<<" :"<<                                                   currentObj<<endl;
        }
      }

   //CHANGING OBJECTIVE FUNCTION OF FIRST SCENARIO

    IloNumArray XCoeff(env);
     IloObjective tempMaxObj=*MaxObjPtr;
     tempMaxObj.setLinearCoefs(X,XCoeff);
     IloModel Maxproblem=*MaxProblemPtr;    
     IloCplex maxcplex(Maxproblem);


  }
}

  catch (IloException& ex) {
     cerr << "Error: " << ex << endl;
  }
  catch (...) {
   cerr << "Error" << endl;
  }

   env.end();

 return 0;
}
int main(int argc,char**argv)
{
int ScenearioNum=2;//小示例中的场景数
伊洛恩温;
试一试{
//生成子问题模型指针:
IloModel*MaxProblemPtr=new(env)IloModel[ScenearioNum];
ILObObjective*MaxObjPtr=新(环境)ILObObjective[ScenearioNum];

对于(int s=0),SU确实知道像ILoMod的C++类只是句柄类,这些句柄类的实例只包含指向每个实例实现的指针。成员函数。您最好保留指向实现实例的指针。谢谢您的建议。我尝试了getImpl()成员函数,没有解决问题。我感到困惑的是,我只尝试了一个场景,并且成功地从指针获得了实例实现。但是,当我添加更多场景时,会出现错误。任何想法都将受到高度赞赏。