VS17.3.6调用IBM CPLEX遇const char*与char*类型不兼容错误求助
问题解决:CPLEX项目编译错误与结果保存实现
一、修复"const char *"与"char *"类型不兼容错误
错误根源是Read_data函数的参数定义为char*,但你传入的"Data_FLEET-ICt_2t"是const char*类型,C++不允许这种隐式类型转换。同时代码里还存在一个逻辑错误:argc > 1时传入的argv[0]是程序自身路径,应该改为argv[1]。
提供两种解决方式:
- 方法1(推荐):修改
Read_data函数参数类型
找到Read_data的声明和定义,将参数从char* filename改为const char* filename,完全适配常量字符串的传入场景,代码修正后:try{ cout<<"Opening file "<<argv[1]<<endl; if(argc > 1){ mono->Read_data(argv[1]); } else{ mono->Read_data("Data_FLEET-ICt_2t"); } mono->Create_model(); } - 方法2(仅用于无法修改函数的场景):强制类型转换
用const_cast临时转换常量字符串类型,前提是确定Read_data不会修改传入的字符串内容:mono->Read_data(const_cast<char*>("Data_FLEET-ICt_2t"));
二、实现优化结果保存到resultado文本文件
在CPLEX求解完成后,添加文件写入逻辑,示例代码如下:
// 假设你的模型已完成求解,先获取求解器对象 IloCplex cplex(mono->getModel()); // 需根据你的实际代码调整模型获取方式 cplex.solve(); // 打开结果文件 ofstream resultFile("resultado.txt"); if (!resultFile.is_open()) { cerr << "无法打开结果文件" << endl; return 1; } // 写入目标函数值 resultFile << "目标函数值: " << cplex.getObjValue() << endl; // 写入变量值(假设你有变量集合IloNumVarArray vars) IloNumVarArray vars = mono->getVariables(); // 需匹配你的变量获取逻辑 for (int i = 0; i < vars.getSize(); ++i) { resultFile << "变量 " << vars[i].getName() << ": " << cplex.getValue(vars[i]) << endl; } // 关闭文件 resultFile.close();
注意事项:
- 需包含头文件:
#include <fstream>和#include <iostream> - 变量集合、模型对象的获取逻辑要与你的项目代码结构匹配,自行调整对应调用方式。
内容的提问来源于stack exchange,提问作者Lucas Tayrone Moreira
相关产品推荐
相关产品推荐

