数组和类?

问题描述:

我是新来的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. 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

我做了一个编辑,试图帮助澄清类定义和对象之间的区别。如果您有任何其他跟进问题,我们可能会提出一个新问题,但尝试查看“有用提示”列表,其中有许多关键概念。 –

根据问题提供的内容很难说清楚,但您应该知道C++使所有类成员都是“私有”,除非另有说明。在这种情况下:

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

会失败的原因有两个:

  1. setArtist是不能公开访问(因为艺术品是私有的,但不要紧,SetArtist是公开的,你不能从外部得到它)
  2. COUT是最有可能期待 东西输出,所以setArtist(返回void)可能会 存在的问题