声明和初始化的问题

时间:2010-07-13 10:16:58

标签: c++ handle

我正在尝试重写我之前编写的代码。 该代码使用cplex Concert API;

#include <ilcplex/ilocplex.h>
    using namespace std;
    ILOSTLBEGIN

    int main(){

    IloEnv env;
    IloModel model(env);
    IloVarArray x(env);
    IloCplex cplex(model);

    return 0;
    }

这段代码(虽然它没有做任何事情)有效...但是现在我已经实现了我自己的类,并且希望能够使用这些函数,但我不知道如何对它们进行初始化。 所以这一次我把它们写成了一个名为solver的不同类。

    //solver.h
    #ifndef solver_h
    #define solver_h
    #include <ilcplex/ilocplex.h>
    class solver{
    public:
        IloModel model;
     IloNumVarArray x;
     IloRangeArray con;
     IloCplex cplex;
     solver();
    solver~();

    };

#endif

然后是cpp文件

//solver.cpp
    #include <ilcplex/ilocplex.h>
    #include <vector>
    using namespace std;
    #include "solver.h"
    ILOSTLBEGIN
    solver::solver(){
    IloEnv env;
    IloModel model(env);
    IloVarArray x(env);
    IloCplex cplex(model);
    }

如果我向这个类添加一个函数,例如一个调用x.add的函数(IloNumVar(env)); 在第一个例子中,这会向x(数组)添加一个变量,但是当我将它放在另一个类中时,我会抓住“tring实现空句柄”......

我知道我在主程序中做的一切正常,如果我在h.file中没有不同的Cplex类,我也可以使用它但是我只能使用相同的模型一次,我想要多次调用同一个模型。

在h.file中是否存在明显错误(除了缺少代码,析构函数等等)或?

2 个答案:

答案 0 :(得分:5)

此代码:

solver::solver(){
   IloEnv env;
   IloModel model(env);
   IloVarArray x(env);
   IloCplex cplex(model);
}

没有初始化你的类成员 - 它在构造函数中创建局部变量,当构造函数退出时它将被销毁。你想要这样的东西:

solver :: solver( IloEnv & env )
      : model( env ), x( env ), cplex( model ) {
}

然后在主要:

int main() {
    IloEnv env;
    solver s( env ); // create solver object
}

答案 1 :(得分:0)

也许

solver::solver () : model (env), x (env), cplex (model)
{
}

更接近你想要的。