我正在尝试重写我之前编写的代码.该代码使用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;
}
Run Code Online (Sandbox Code Playgroud)
这段代码(尽管它没有做任何事情)有效...但是现在我已经实现了我自己的类,并且希望能够使用这些函数,但我不知道如何对它们进行初始化.所以这次我把它们写成了一个名为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
Run Code Online (Sandbox Code Playgroud)
然后是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);
}
Run Code Online (Sandbox Code Playgroud)
如果我向这个类添加一个函数,例如一个调用x.add(IloNumVar(env))的函数; 在第一个例子中,这会向x(数组)添加一个变量,但是当我将它放在另一个类中时,我会抓住"tring实现空句柄"......
我知道我在主程序中正在做的一切,如果我在h.file中没有不同的Cplex类,我也可以使用它但是我只能使用相同的模型一次,我想调用它相同型号几次.
在h.file中是否存在明显错误(除了缺少代码,析构函数等)?
小智 5
这段代码:
solver::solver(){
IloEnv env;
IloModel model(env);
IloVarArray x(env);
IloCplex cplex(model);
}
Run Code Online (Sandbox Code Playgroud)
没有初始化你的类成员 - 它在构造函数中创建局部变量,当构造函数退出时它将被销毁.你想要的东西:
solver :: solver( IloEnv & env )
: model( env ), x( env ), cplex( model ) {
}
Run Code Online (Sandbox Code Playgroud)
然后在主要:
int main() {
IloEnv env;
solver s( env ); // create solver object
}
Run Code Online (Sandbox Code Playgroud)