You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:51:45