C++ 在C+中声明全局变量时出现问题+;

C++ 在C+中声明全局变量时出现问题+;,c++,cplex,C++,Cplex,我在类中有一个全局变量: IloModel model; 这将在类的几个函数之间共享 在其中一个函数中,我将初始化此模型,如下所示: model(env); 我得到一个错误: 错误1错误C2064:该项的计算结果不是采用1个参数的函数 如果我在函数中写入: IEnv env; IloModel model(env); 但如果模型对象是全局声明的,则不会 请建议如何使模型对象成为全局对象,以便同一对象可以在多个函数之间共享?当您这样做时 IloModel model; 正在使用默认构造函数

我在类中有一个全局变量:

IloModel model;
这将在类的几个函数之间共享

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

model(env);
我得到一个错误: 错误1错误C2064:该项的计算结果不是采用1个参数的函数

如果我在函数中写入:

IEnv env;
IloModel model(env);
但如果模型对象是全局声明的,则不会

请建议如何使模型对象成为全局对象,以便同一对象可以在多个函数之间共享?

当您这样做时

IloModel model;
正在使用默认构造函数初始化它;所以
IloModel()

你需要做的是

model = IloModel(env);

出现错误可能是因为它正在寻找一个带有一个参数的函数模型,但没有找到一个参数。

为什么不全局声明env,然后直接用env初始化模型? 换言之,将其放在全球范围内:

IEnv env;
IloModel model(env);

否则,您无法调用构造函数来初始化模型,您需要在
IloModel
类上使用另一个init方法来指定构建后的
IEnv

您不能在稍后的时间点调用对象的
model
的构造函数。您需要在定义对象本身时执行此操作。如果
env
也是全局的,那么您可以执行
IModel model(env)
对模型类调用的函数是它的构造函数。作为类的成员(类的全局成员,但除非应用程序是静态的和可访问的,否则肯定不是应用程序),您可以构造一次它,它位于拥有它的类的初始值设定项列表中,例如:

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
(或者是这个问题的模型),所以如果逻辑要求您每次使用它时都需要使用不同的
IEnv
构建模型,那么这可能对您不起作用。

我不确定您是否理解“全局”的含义,因为您似乎在谈论类的一个成员。无论如何,如果你的数据是可复制的,你可以这样做

model = IloModel(env);

这将创建一个新模型并将其复制到当前模型上。

在上一个示例中,您调用构造函数,这是一个初始化对象的特殊函数。第一个示例尝试调用对象
模型
上的
操作符()
,如果类
IloModel
没有定义,则它不存在

但是,您可以调用
IloModel(env)
会创建一个临时对象并立即再次销毁它,呵呵。

“类中的全局变量”用词不当。从描述来看,“这将在类的几个函数之间共享”,它听起来像一个普通的类变量。