2011-02-02 75 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);這將創建一個臨時對象,並立即再次銷燬它,嘿。