繁体   English   中英

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

[英]Problem declaring Global Variable in C++

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

IloModel model;

这将在该类的几个功能之间共享。

在其中一个函数中,我将像这样初始化该模型:

model(env);

我收到错误:错误1错误C2064:术语未求值为带有1个参数的函数

如果我在函数中编写,这将起作用:

IEnv env;
IloModel model(env);

但是如果模型对象是全局声明的,则不是。

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

当你做

IloModel model;

正在使用默认构造函数进行初始化。 所以IloModel()

您需要做的是

model = IloModel(env);

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

不知道我对“全局”的含义是什么,因为您似乎在谈论课程的成员。 无论如何,如果您的数据是可复制的,您可以做

model = IloModel(env);

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

为什么不也全局声明env,然后直接使用env初始化模型? 换句话说,将其全局放置:

IEnv env;
IloModel model(env);

否则,您无法调用构造函数来初始化模型,需要在IloModel类上使用另一个init方法在IEnv后指定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构建模型,那么这可能对您IEnv

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM