2013-03-14 54 views
1

我在這個代碼構造類數組

class business 
{ 
    public: 
     business(); // Default Constructor 
     business(string busines,int r) 
     { 
      busines=busines; 
      ratings=r; 
     } // constructor; 

    private: 

     string busines; 
     int ratings; 
     int items_owned; 
     int business_cancellation; 
     int biz_size_of_building; 
     int biz_shipping_method; 
}; 

int main(int argc, char *argv[]) 
{ 
    business b[10]; 

    b[b_count](busines,rating); 

    return 0; 
} 

它給了我下面的錯誤(http://ideone.com/FfajNS)得到錯誤的:

prog.cpp: In function ‘int main(int, char**)’: 
prog.cpp:32:32: error: no match for call to ‘(business) (std::string&, int&)’ 
+1

如果未定義默認構造函數,則無法創建數組。此外,當你定義數組時,所有的對象都被創建;所以你不要再次調用構造函數。 – Jaywalker 2013-03-14 17:49:50

回答

3

你試圖調用上的構造已經構建的對象...默認的構造函數在數組創建期間被調用,因此您不能再「構造」對象。對於您的應用程序,您可能需要考慮使用std::vector,您可以使用從一組默認參數初始化的對象創建一個類似數組的容器。

舉例來說,你可以這樣做:

std::vector<business> array(10, business(business_string, rating)); 
1

數組b使用default構造函數類的已經創建的10個業務對象。您可以通過business someBusiness = b[someIndex];

編輯訪問這些對象:

如果你想設置你的個人物品的價值,只要做到這一點(注意,不要創建這些對象,只是其值設置):

for(int i=0; i<10; i++) 
{ 
    b[i].busines = ...; 
    b[i].ratings = ...; 

    /* or to create new ones */ 

    b[i] = business("asd", 10); 
} 

它甚至會更好,如果你在vector存儲這些對象,像傑森建議

+0

其實我必須設置變量,如用戶將進入業務和評級十次,這些變量將相應地設置爲這意味着什麼? – mun 2013-03-15 10:10:53

0
business b[10]; 

您創建10個「默認」業務對象。什麼是b_count?我希望有INT從0到9 但在這裏你「呼籲」以2個參數業務對象:

b[b_count](busines,rating); 

但企業沒有與2 parametr定義operator()()

編輯: 你一定要用std::vector並仔細閱讀其他答案。 但我知道有時初學者不允許使用STL庫,無論如何,您似乎應該瞭解如何使用構造函數以及如何初始化數組的元素。請閱讀靜態成員及其定義方式,並嘗試瞭解下面的示例如何工作。

#include <string> 
using std::string; 
class business 
{ 
    public: 
     business()      // Default Constructor 
      :busines(def_busines),ratings(def_ratings){}; 
     business(const string& bus,int r) // constructor; 
      :busines(bus),ratings(r){} 

     static void SetDef(const string& busines,int r) 
     { 
      def_busines=busines; 
      def_ratings=r; 
     } 

    private: 

     string  busines; 
     int   ratings; 
     static string def_busines; 
     static int def_ratings; 
     int items_owned; 
     int business_cancellation; 
     int biz_size_of_building; 
     int biz_shipping_method; 

}; 
    string business::def_busines=""; // Set here the default-defaults 
    int business::def_ratings=1; 

int main(int argc, char *argv[]) 
{ 
    business::SetDef("Some business",2); 
    business a[10]; 

    business::SetDef("Other business",3); 
    business b[10]; 

    business c("Third business",4); 


    return 0; 
} 
+0

我有一個構造函數業務(字符串業務,INT評級)定義,所以這個構造函數應該被調用。但我不知道爲什麼它不會調用數組。 – mun 2013-03-15 06:30:08

+0

@mun。我希望編輯會幫助你。 – qPCR4vir 2013-03-15 08:11:56

1

我相信你想是這樣的:

b[2] = business("Denny's", 50); 

通過調用具有給定參數的構造函數創建一個臨時的業務變量。然後將臨時數據複製到數組b的插槽3中。