ILOG CPLEX 10.2 Getting Started > Tutorials > Concert Technology Tutorial for C++ Users > Building and Solving a Small LP Model in C++ > General Structure of an ILOG CPLEX Concert Technology Application

The first operation is to create the environment object env, and the last operation is to destroy it by calling env.end. The rest of the code is enclosed in a try/catch clause to gracefully handle any errors that may occur.

First the example creates the model object and, after checking the correctness of command line arguments, it creates empty arrays for storing the variables and range constraints of the optimization model. Then, depending on the command line argument, the example calls one of the functions populatebyrow, populatebycolumn, or populatebynonzero, to fill the model object with a representation of the optimization problem. These functions place the variable and range objects in the arrays var and con which are passed to them as arguments.

After the model has been populated, the IloCplex algorithm object cplex is created and the model is extracted to it. The following call of the method solve invokes the optimizer. If it fails to generate a solution, an error message is issued to the error stream of the environment, cplex.error(), and the integer -1 is thrown as an exception.

IloCplex provides the output streams out for general logging, warning for warning messages, and error for error messages. They are preconfigured to cout, cerr, and cerr respectively. Thus by default you will see logging output on the screen when invoking the method solve. This can be turned off by calling cplex.setOut(env.getNullStream()), that is, by redirecting the out stream of the IloCplex object cplex to the null stream of the environment.

If a solution is found, solution information is output through the channel, env.out which is initialized to cout by default. The output operator << is defined for type IloAlgorithm::Status as returned by the call to cplex.getStatus. It is also defined for IloNumArray, the ILOG Concert Technology class for an array of numerical values, as returned by the calls to cplex.getValues, cplex.getDuals, cplex.getSlacks, and cplex.getReducedCosts. In general, the output operator is defined for any ILOG Concert Technology array of elements if the output operator is defined for the elements.

The functions named populateby* are purely about modeling and are completely decoupled from the algorithm IloCplex. In fact, they don't use the cplex object, which is created only after executing one of these functions.