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)
会创建一个临时对象并立即再次销毁它,呵呵。“类中的全局变量”用词不当。从描述来看,“这将在类的几个函数之间共享”,它听起来像一个普通的类变量。