0

クラスにグローバル変数があります:

IloModel model;

これは、クラスのいくつかの関数間で共有されます。

関数の 1 つで、このモデルを次のように初期化します。

model(env);

次のエラーが表示されます: エラー 1 エラー C2064: 用語は 1 つの引数を取る関数に評価されません

これは、関数に次のように記述した場合に機能します。

IEnv env;
IloModel model(env);

ただし、モデル オブジェクトがグローバルに宣言されている場合はそうではありません。

同じオブジェクトを複数の関数間で共有できるように、モデル オブジェクトをグローバルにする方法を教えてください。

4

6 に答える 6

6

あなたがするとき

IloModel model;

デフォルトのコンストラクターで初期化されています。それでIloModel()

あなたがする必要があるのは

model = IloModel(env);

おそらく、1 つのパラメーターを持つ関数モデルを探していて、見つからないため、エラーが発生する可能性があります。

于 2011-02-02T11:03:02.537 に答える
1

クラスのメンバーについて話しているように見えるので、「グローバル」の意味がわかりません。とにかくあなたのデータがコピー可能であればあなたはすることができます

model = IloModel(env);

これにより、新しいモデルが作成され、現在のモデルにコピーされます。

于 2011-02-02T11:04:24.053 に答える
0

最後の例では、オブジェクトを初期化するための特別な関数であるコンストラクターを呼び出します。operator()最初の例では、オブジェクトでを呼び出そうとしますmodelが、クラスIloModelで定義されていない場合、オブジェクトは存在しません。

ただし、これを呼び出すIloModel(env);と、一時オブジェクトが作成され、すぐに再び破棄される可能性があります。

于 2011-02-02T11:04:54.043 に答える
0

env もグローバルに宣言してから、env でモデルを直接初期化してみませんか? つまり、これをグローバルに配置します。

IEnv env;
IloModel model(env);

それ以外の場合、コンストラクターを呼び出してモデルを初期化することはできません。構築後IloModelに を指定するには、クラスに別の init メソッドが必要IEnvです。

于 2011-02-02T11:03:12.520 に答える
0

modelオブジェクトのコンストラクターを後で呼び出すことはできません。オブジェクト自体の定義時に行う必要があります。もグローバルである場合envは、実行できますIModel model(env)

于 2011-02-02T11:03:31.557 に答える
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

于 2011-02-02T11:03:33.290 に答える