我在课堂上有一个全局变量:
IloModel model;
将在班级的几个职能中共享。
在其中一个函数中,我将初始化此模型,如:
model(env);
我收到错误: 错误1错误C2064:术语不评估为采用1个参数的函数
如果我在函数中写道,这是有效的:
IEnv env;
IloModel model(env);
但不是全局声明模型对象。
请建议如何使模型对象全局化,以便在多个函数之间共享相同的对象?
答案 0 :(得分:6)
当你做
时IloModel model;
使用默认构造函数初始化它;所以IloModel()
您需要做的是
model = IloModel(env);
错误可能是因为它正在寻找一个具有一个paramatere而没有找到一个的函数模型。
答案 1 :(得分:1)
不确定我理解你对“全球”的意思,因为你似乎在谈论班上的一员。无论如何,如果你的数据是可复制的,你可以做到
model = IloModel(env);
这将创建一个新模型并将其复制到当前模型上。
答案 2 :(得分:0)
为什么不在全局声明env然后用env直接初始化模型? 换句话说,全球化:
IEnv env;
IloModel model(env);
否则,您无法调用构造函数来初始化模型,您需要在IloModel
类上使用另一个init方法来指定构造后的IEnv
。
答案 3 :(得分:0)
您不能在以后调用对象的model
的构造函数。您需要在定义对象本身时执行此操作。如果env
也是全局的,那么您可以执行IModel model(env)
。
答案 4 :(得分:0)
您在模型类上调用的函数是它的构造函数。作为类的成员(除非它是静态的和可访问的,否则不是应用程序的全局),你可以构造它一次并且在类的初始化列表中拥有它,例如:
class MyClass
{
private:
IloModel model;
public:
MyClass(IEnv _env) : model(_env) // constructs model here, passing env
{
};
void someFunction()
{
// use model here
};
}; // eo class MyClass
现在,我不知道IEnv
究竟是什么(或者那个问题的模型)所以如果逻辑规定您需要构建具有不同{{1}的模型,这可能对您不起作用每次你使用它。
答案 5 :(得分:0)
在上一个示例中,您调用构造函数,这是一个初始化对象的特殊函数。第一个示例尝试调用对象operator()
上的model
,如果类IloModel
没有定义一个,则它不存在。
然而,您可以调用IloModel(env);
来创建一个临时对象并立即再次销毁它,呵呵。