2011-02-02 74 views
0

声明全局变量我在类的全局变量:问题在C++

IloModel model; 

是要之间的类的几个功能共享。

在功能之一,我要初始化这种模式,如:

model(env); 

我得到的错误: 错误1个错误C2064:术语不计算为函数取1个参数

这工作,如果我写的函数:

IEnv env; 
IloModel model(env); 

但如果模型对象的全局声明。

请指教如何使模型对象成为全局对象,以便在多个函数之间共享相同的对象?

+0

“班级中的全局变量”是不恰当的。从描述中,“这将在类的几个功能之间共享”,这听起来像一个普通的类变量。 – Arun 2011-02-02 13:51:12

回答

6

当你做

IloModel model; 

它被初始化与默认的构造函数;所以IloModel()

你需要做的是

model = IloModel(env); 

有错误可能是因为它正在寻找一个函数模型与一个paramatere并没有找到一个。

+0

很棒,简单而优秀:-) – InfoLearner 2011-02-02 11:11:57

0

为什么你不声明全局env然后直接用env初始化模型? 换句话说,全球范围内把这个:

IEnv env; 
IloModel model(env); 

否则,你不能调用构造函数初始化模式,你需要IloModel类另一个init方法施工后指定IEnv

0

您不能在稍后的时间点调用对象的构造函数model。您需要在定义对象本身时执行此操作。如果env也是全球性的,那么你可以做IModel model(env)

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在所有(或为此事模型),所以如果从逻辑上讲,你需要构建模型,每次你不同的IEnv这可能不是为你工作用它。

1

不知道我明白你的意思与“全球”,因为它似乎你是在谈论一个类的成员。无论如何,如果你的数据是可复制,你可以做

model = IloModel(env); 

这将创建一个新的模型,并将其复制在当前之一。

0

在你上一个例子中,你调用构造函数,一个特殊的函数来初始化对象。第一个示例尝试在对象model上调用operator(),如果类IloModel未定义类别,则它不存在。

然而,你可以调用IloModel(env);这将创建一个临时对象,并立即再次销毁它,嘿。