Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 或工具C++;:MutableObjective()返回null_C++_Null_Or Tools - Fatal编程技术网

C++ 或工具C++;:MutableObjective()返回null

C++ 或工具C++;:MutableObjective()返回null,c++,null,or-tools,C++,Null,Or Tools,我刚刚继承了一段代码,它使用或工具解决了一个混合整数编程问题。将或工具集成到VS2019本身就是一件令人头痛的事情(我不太习惯C++)。现在程序正在运行,但我得到: 访问冲突读取位置0x0000000000000020 根据调试器,看起来solver.MutableObjective()返回null 其他函数,如MakeRowConstraint似乎工作正常,并且不返回null。有什么线索吗?可能是我在安装库时配置错误吗 MPSolver solver("simple_mip_prog

我刚刚继承了一段代码,它使用或工具解决了一个混合整数编程问题。将或工具集成到VS2019本身就是一件令人头痛的事情(我不太习惯C++)。现在程序正在运行,但我得到:

访问冲突读取位置0x0000000000000020

根据调试器,看起来
solver.MutableObjective()
返回null

其他函数,如
MakeRowConstraint
似乎工作正常,并且不返回null。有什么线索吗?可能是我在安装库时配置错误吗

MPSolver solver("simple_mip_program", MPSolver::SCIP_MIXED_INTEGER_PROGRAMMING);
//...
MPObjective* FObj = solver.MutableObjective(); // <-- NULL

//therefore the below throws exception.
//The arrays `variables` and `F` are populated as expected
for (int i = 0; i < n; i++) FObj->SetCoefficient(variables[i], F[i]);
FObj->SetMaximization();
MPSolver-solver(“简单的mip-program”,MPSolver::SCIP-MIXED-INTEGER-PROGRAMMING);
//...
MPObjective*FObj=solver.MutableObjective();//设定系数(变量[i],F[i]);
FObj->SetMaximization();

编辑:更多详细信息,我正在Windows 10和Visual Studio 2019上使用ORTools 64位_v8.1.8487


我还尝试运行,第54行出现了相同的错误。

在创建目标之前,您需要调用Minimize()或Maximize()。

我最后所做的更多是一种变通方法

ORTools库下载附带示例程序和Makefile。因此,我用所需的代码替换了其中一个示例文件的内容,并使用提供的Makefile编译/运行程序


这样,与我使用的代码完全相同的代码不再显示错误。因此,我想问题是某个地方的链接/导入问题。

如果您想在自己的项目中集成库,还需要正确的标志

 CXXFLAGS = /std:c++17 /EHsc /MD /nologo /D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS -nologo $(DEBUG) \ 
   /DPSAPI_VERSION=1 /D__WIN32__ /DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS \ 
   /DGOOGLE_GLOG_DLL_DECL= \ 
   /I$(INC_DIR)\\src\\windows /I$(INC_DIR) /I. \ 
   /DUSE_BOP /DUSE_GLOP \ 
   /DUSE_CBC /DUSE_CLP \ 
   /DUSE_SCIP 

参考:

在Windows 10和Visual Studio 2019上,我有完全相同的设置:ORTools 64位_v8.1.8487

要重现该问题,请在VisualStudio2019中运行示例代码“examples/cpp/linear_programming_example.cc”。(使用.lib并包含/包含在属性中。)

我用计算机解决这个问题-

将C++编译器改为C++ 17(默认值:14)和
  • 添加标志“/D\u静默\u CXX17\u旧的\u分配器\u成员\u弃用\u警告/D\u静默\u所有\u CXX17\u弃用\u警告” 编译时

  • 请看编辑。甚至GitHub上的演示代码也会给出相同的错误,在哪个对象上调用
    Maximize()
    ?在解算器上,如
    solver.Maximize()
    ?实际上,不,在创建解算器时,MPObject是初始化的。如果使用glop解算器,它是否工作?很确定你没有定义USE_SCIP define。。。