Я пытаюсь переписать код, который я написал ранее.
Код использует cplex концертный 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.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 для реализации пустого дескриптора» ...
Я знаю, что все делаю правильно в основной программе, и я также заставляю ее работать, если у меня нет разных классов Cplex в h.file, но тогда я могу использовать одну и ту же модель только один раз, и я бы хотел называть одну и ту же модель несколько раз.
Есть ли здесь что-то явно не так (кроме отсутствия кода, деструкторов и т. Д.) В h.file или?