2016-07-01 16 views
-1

我是新來的C + +和一個項目,我有一個類的實例數組,並在該類中,我有一個結構,我有一個函數。 如何在我的主代碼塊中使用該功能。我試過數組和類?

class artwork { 
    struct art { 
     // the struct art contains important information such as artist, title and medium. 
    private: 
     string artist; 
    public: 
     void setArtist(string values); 
     string getArtist(); 
    }; 

    void artwork::art::setArtist(string values) { 
     artist = values; 
    } 

int main(){ 
    artwork myartwork[500]; 
    for (int i = 0; i < 500; i++) { 

     ///----------------------------------- 
     ///----------------------------------- 
     // below is where the error occurs? How do I reference setArtist? 
     ///----------------------------------- 
     ///----------------------------------- 

     cout << myartwork[0].art.setArtist("Tim"); 
    } 
    system("pause"); 
    return 0; 
} 
+2

您應該先發布有效的代碼。這會讓你更容易理解。 – juanchopanza

回答

1

兩幾件事情需要在這裏更改:

  1. class artwork需要art
  2. 類型的成員變量,成員變量需要被公之於衆
  3. 成員變量需要具有比art不同的名稱,因爲該結構
  4. 您需要artwork
右大括號和分號已經聲名類型3210

您的代碼也許應該解決的東西是這樣的:

class artwork { 
public: 
    struct art { 
    private: 
     string artist; 
    public: 
     void setArtist(string values){artist = values;} 
     string getArtist(){return artist;} 
    } art_; 
}; 

int main(){ 
    artwork myartwork[500]; 
    for(int i = 0; i < 500; i++) { 
     myartwork[i].art_.setArtist("Tim"); 
     cout << myartwork[i].art_.getArtist(); 

    } 
} 

其他有用的提示:

  1. 傳遞對象通過構造參考
  2. 初始化,而不是初始化方法
  3. 喜歡做爲數據聚合類型的構造函數賦值初始化
  4. 對數組大小的循環不是幻數
  5. 製作干將通過const引用返回
  6. 確認沒有改變對象常量的狀態
  7. 讓成員不爲對象常量

編輯的壽命改變方法:

將您的類定義視爲藍圖,將成員視爲實際對象。如果我們想要一個artwork即有多個art對象,在協作也許是的話,那麼我們可以這樣做:

class artwork { 
public: 
    struct art { 
    private: 
     string artist; 
    public: 
     void setArtist(string values){artist = values;} 
     string getArtist(){return artist;} 
    }; 

    art art1_; 
    art art2_; 
}; 

需要注意的是,我們沒有定義struct兩次,我們只定義了兩個對象。然後,如果我們有一個藝術品對象,例如:artwork foo我們可以這樣做:

foo.art1_("Sam Arnold"s); 
foo.art2_("Jonathan Mee"s); 
+0

我做了成員,它的工作完美。謝謝。我是C++新手。並且今天拿起一本書來練習。我不知道爲什麼我需要讓它成爲一個班級的成員,儘管? –

+0

我做了一個編輯,試圖幫助澄清類定義和對象之間的區別。如果您有任何其他跟進問題,我們可能會提出一個新問題,但嘗試查看「有用提示」列表,其中有許多關鍵概念。 –

-1

根據問題提供的內容很難說清楚,但您應該知道C++使所有類成員都是「私有」,除非另有說明。在這種情況下:

cout << myartwork[0].art.setArtist("Tim"); 

會失敗的原因有兩個:

  1. setArtist是不能公開訪問(因爲藝術品是私有的,但不要緊,SetArtist是公開的,你不能從外部得到它)
  2. COUT是最有可能期待 東西輸出,所以setArtist(返回void)可能會 存在的問題