2013-10-21 69 views
-2

我有一個由n粒子組成的系統。一個粒子對象可以通過使用一個構造函數來初始化,該構造函數接受幾個參數(比如double)作爲參數。使用構造函數初始化一個對象數組,該構造函數接受用於創建對象的參數

Particle p(para1, para2 ... , paraN); 

我現在有一個系統需要一個n粒子數組。我想要構建一個構造函數,它接受粒子參數中的對象數量並創建一個n-Particle數組。

我試過如下:

class System { 

public: 
    Particle p[]; //declare dynamic array 

    System() {} 
    //Constructor 
    System(int n, para1, para2 ... , paraN) 
    { 
     Particle p[n]; //Particle array of size n 
     for(int i=0; i<n; i++) 
     { 
       Particle temp(para1, para2 ... , paraN); 
       p[i] = temp; 
      } 
     } 
}; 

程序不編譯並提供了以下錯誤:

error: no match for ‘operator=’ in ‘p[i] = tempp’ 
note: candidate is: 
note: Particle& Particle::operator=(const Particle&) 
note: no known conversion for argument 1 from ‘Particle(double, double, double,  double)’ to ‘const Particle&’ 

我新的C++和OOP一般。任何幫助如何克服這將不勝感激。

+1

請注意,構造函數中的數組p隱藏了相同名稱的屬性p。改用'p = new Particle [n]'來代替。 – Sjlver

+0

具體來說,大小爲n的註釋// Particle數組並不意味着兩個P [n]意味着同一件事情 – doctorlove

+0

這是錯誤的確切代碼:錯誤表示'p'中的'operator ='不匹配= tempp',你的代碼表示p [i] = temp; – doctorlove

回答

0

當您使用p[i] = temp,編譯器會爲賦值運算符的粒子類的過載與簽名:

Particle& Particle::operator=(const Particle&) 

這樣做的目的是讓你定義了對象如何工作的分配取決於它的類別。在這裏你可以做屬性分配或分配你定義的粒子的語義。當你在指針的複製可能不是正確行爲的對象中動態分配數據時,這是特別有用的。

看看這個頁面:http://www.cplusplus.com/articles/y8hv0pDG/ 它不僅解釋了爲什麼以及何時需要賦值操作符,還有拷貝構造函數。

+0

爲什麼我們從'粒子(雙,雙,雙,雙)'到'常量粒子&'沒有已知的轉換? – doctorlove

相關問題