我在类中有一个全局变量:
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
构造之后。
您不能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
在上一个示例中,您调用构造函数,这是一个用于初始化对象的特殊函数。第一个示例尝试operator()
在您的 object 上调用model
,如果该类IloModel
未定义一个,则它不存在。
但是,您可以调用IloModel(env);
which 将创建一个临时对象并立即再次销毁它,呵呵。