在C ++中声明全局变量的问题

时间:2011-02-02 10:59:46

标签: c++ cplex

我在课堂上有一个全局变量:

IloModel model;

将在班级的几个职能中共享。

在其中一个函数中,我将初始化此模型,如:

model(env);

我收到错误: 错误1错误C2064:术语不评估为采用1个参数的函数

如果我在函数中写道,这是有效的:

IEnv env;
IloModel model(env);

但不是全局声明模型对象。

请建议如何使模型对象全局化,以便在多个函数之间共享相同的对象?

6 个答案:

答案 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);来创建一个临时对象并立即再次销毁它,呵呵。